1. 首页
  2. 渗透测试

这你不是你所常见的PHP文件包含漏洞(利用phpinfo)

【推荐学习】暗月渗透测试培训 十多年渗透经验,体系化培训渗透测试 、高效学习渗透测试,欢迎添加微信好友aptimeok 咨询。

0x01 前言

看到文件包含(+phpinfo ) 的问题,在上次众测中出现此题目,如果没打过CTF,可能真的很少见到这种问题,当然作为小白的我,也是很少遇到,毕竟都是第一次,那就来总结一波经验和操作,附赠EXP,借鉴网上大佬环境,进一步进行探索。

0x02 漏洞环境

执行如下命令启动环境:

docker-compose up -d

目标环境是官方最新版PHP7.2,说明该漏洞与PHP版本无关。

环境启动后,访问http://your-ip:8080/phpinfo.php即可看到一个PHPINFO页面,访问http://your-ip:8080/lfi.php?file=/etc/passwd,可见的确存在文件包含漏洞。

源码及其EXP地址:

https://github.com/vulhub/vulhub/tree/master/php/inclusion

0x03 漏洞复现

利用docker复现该漏洞,访问http://192.168.80.156:8080/phpinfo.php,可以看到页面出现phpinfo页面

这你不是你所常见的PHP文件包含漏洞(利用phpinfo)

再访问http://192.168.80.156:8080/lfi.php?file=/etc/passwd,可以看到该页面是存在文件包含漏洞的。

这你不是你所常见的PHP文件包含漏洞(利用phpinfo)

具体步骤:

在网上找的脚本:https://github.com/vulhub/vulhub/blob/master/php/inclusion/exp.py

利用该脚本上传我们的恶意文件

这你不是你所常见的PHP文件包含漏洞(利用phpinfo)

接下来只要运行脚本就可以成功上传我们的文件了

这你不是你所常见的PHP文件包含漏洞(利用phpinfo)

http://192.168.80.156:8080/lfi.php?file=/tmp/g&1=system(%27cat%20/etc/passwd%27);

这你不是你所常见的PHP文件包含漏洞(利用phpinfo)
这你不是你所常见的PHP文件包含漏洞(利用phpinfo)

0x04 文件包含原理

先讲一下利用phpinfo上传文件,然后在文件包含的原理:

参考链接:https://github.com/vulhub/vulhub/tree/master/php/inclusion

在给PHP发送POST数据包时,如果数据包里包含文件区块,无论访问的代码中是否有处理文件上传的逻辑,php都会将这个文件保存成一个临时文件(通常是/tmp/php[6个随机字符]),这个临时文件在请求结束后就会被删除,同时,phpinfo页面会将当前请求上下文中所有变量都打印出来。但是文件包含漏洞和phpinfo页面通常是两个页面,理论上我们需要先发送数据包给phpinfo页面,然后从返回页面中匹配出临时文件名,将这个文件名发送给文件包含漏洞页面。

因为在第一个请求结束时,临时文件就会被删除,第二个请求就无法进行包含。

但是这并不代表我们没有办法去利用这点上传恶意文件,只要发送足够多的数据,让页面还未反应过来,就上传我们的恶意文件,然后文件包含:

1)发送包含了webshell的上传数据包给phpinfo,这个数据包的header,get等位置一定要塞满垃圾数据;

2)phpinfo这时会将所有数据都打印出来,其中的垃圾数据会将phpinfo撑得非常大

3)PHP默认缓冲区大小是4096,即PHP每次返回4096个字节给socket连接

4)所以,我们直接操作原生socket,每次读取4096个字节,只要读取到的字符里包含临时文件名,就立即发送第二个数据包

5)此时,第一个数据包的socket连接其实还没有结束,但是PHP还在继续每次输出4096个字节,所以临时文件还未被删除

6)我们可以利用这个时间差,成功包含临时文件,最后getshell

本文来自https://blog.csdn.net/Adminxe/article/details/105907995,经授权后发布,本文观点不代表立场,转载请联系原作者。

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息