前言
PHP的文件包含可以直接执行包含文件的代码,包含的文件格式是不收限制的,只要能正常执行即可。文件包含又分为本地文件包含和远程文件包含。渗透测试中文件包含漏洞大多可以直接利用获取webshell。文件包含函数有include、include_once,require、require_once。他们之前的区别就是include遇到报错还会执行下面的代码,require则是会报错退出程序。远程文件包含是需要开启allow_url_include=On的。
正文
接下来就开始学习一下文件包含的3中截断方法
首先给出代码
这是网站首页,这段代码是典型的文件包含漏洞,将获取的get传参进行文件包含,参数为可控
我的目录下有一个123.php文件,内容为这里是123.php文件
可以看到文件包含的内容固定添加了.php后缀,没法任意文件包含
文件包含截断方法有3种,第一种是使用%00截断,但是php>5.3以后就不能使用了,开启了GPC的情况下也是不能使用的
我在123.txt下写了一段php代码,来进行测试
直接添加?a=123.txt%00,是可以截断后缀名的,这样就可以达到任意文件包含的目的了
第二种截断方法是使用垃圾字符填充
Windows下使用(.)加(/)的方法填充259次,linux下需要使用2038次
这一种方法我本地没能复现成功
第三种方法是在远程文件包含时通过?来伪截断
这种阶段方法不受GPC和PHP版本的影响,webserver会把问好当作请求的参数
来看示例