BMG:
我们都知道不管什么语言都有包含头文件,包含漏洞就是利用的PHP头文件包含的漏洞,因为网络上代码的文件包含有时候是可以覆盖更改的,
倘若你能更改掉原先的路径,去包含你自己的文件不是可以有很大的空间去发挥吗?下面我详细介绍下
测试代码都很简单啊 只需要用个记事本写下 然后自己安装个PHPStudy 然后就可以在自己的网页访问了
本地包含与远程包含
一基本定义
包含产生的漏洞基本原理就是,包含某个文件名,通过对被包含文件内容的修改进行操作
这是4个包含函数,include,include_once,require,require_once
在PHP 中,有四个用于包含文件的函数,当使用这些函数包含文件时,文件中包含的PHP
代码会被执行。下面对它们之间的区别进行解释:
include():当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,
发生错误时只给出一个警告,继续向下执行。
include_once():功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次。
require():
1.require()与include()的区别在于require()执行如果发生错误,函数会输出错误信
息,并终止脚本的运行。
2.使用require()函数包含文件时,只要程序一执行,立即调用文件,而include()只
有程序执行到该函数时才调用。
require_once():它的功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。。
需要注意的是
本地包含受gpc的影响,在其关闭下才能进行,开启后会被过滤转义。还可以进行
%00截断,就是遇到空格停止解析文件名,借此可以突破某些文件后缀名限制上传木马脚本。
远程包含:
需要开启allow_url_fopen和
Allow_url_include为On
下面进行简单的代码演示:
这是简单的本地包含url包含1.txt成功执行
- txt里面的phpinfo();的内容。如果执行 phpinfo就是执行自己的PHP版本的配置文件 ,如果成功 则证明存在漏洞
include $file.".php";则会限制文件后缀名限制。智能上传php后缀的文件,但是可以%00截断
PS:%00截断是IIS6.0的解析漏洞,
就比如说 本来是不允许上传 1.php文件的只允许上传突破。jpg格式的,但你把文件名改成 1.php ;.jpg注意啊中间有个空格,
在16进制下改成00,上传时因为是。jpg会允许上传,解析时遇到00则停止解析,等于上传网页解析后还是1.php成功突破
演示如下:
看,开始失败 为什么失败呢 因为gpc开着 ,什么是GPC了 ,朋友可以百度下,大致的意思是 魔术过滤引号,转义',"等等这些可能造成的漏洞,加强防范的,
后面加%00后成功,原理就是遇到%00不再往后解析文件格式。
http://127.0.0.1/php/include1.php?file=1.txt%00
远程包含基本原理一样就是把文件路径名换成URL的路径即可。
三.伪协议
前提也是 allow_url_include =ON开启 而且PHP版本
>=5.2.0.
在包含路径输入php://input,然后执行POST参数里面的代码
,具体是为什么,还没有弄清楚。有可能是GET变POST方式执行代码。
演示如下
也可以执行CMD命令,功能十分强大
第二个伪协议
php://filter/read=convert.base64-encode/resource=
读本地文件的
解码后就是原先的1.txt里面的内容
测试代码如下:
<?php if (isset($_GET['file'])) { $file = $_GET['file']; include $file; //include $file.".php"; } ?>