1.简介
在PHP文件包含漏洞中,当我们找不到用于触发RCE的有效文件时,如果存在PHPINFO(它可以告诉我们临时文件的随机生成的文件名及其位置),我们可能可以包含一个临时文件来利用它。
当向PHP发送POST请求并且请求包含一个文件块时,PHP会将所发送的文件保存到一个临时文件中(通常是/tmp/PHP[6个随机数字]),文件名可以在$u FILES变量中找到。请求结束后将删除此临时文件。
同时,PHPINFO页面打印上下文中的所有变量,包括$u文件。因此,如果我们将POST请求发送到PHPINFO页面,则可以在响应中找到临时文件的名称。
这样,LFI漏洞就可以升级为RCE,而不需要存在可用的本地文件。
文件包含和PHPINFO通常位于不同的网页中。理论上,我们需要在PHPINFO页面的文件上传请求的响应中检索文件名后,将文件名发送到文件包含页面。但是,在第一个请求完成后,文件将从磁盘中删除,因此我们需要赢得比赛。
2.步骤:
1.将文件上载请求发送到带有页眉的PHPINFO页,并获取包含大量垃圾数据的字段。
2.响应内容将是巨大的,因为PHPINFO将打印出所有数据。
3.PHP的默认输出缓冲区大小为4096字节。可以理解为PHP在套接字连接期间每次返回4096字节。
4.所以我们使用原始套接字来实现我们的目标。每次我们读取4096字节并在得到文件名后将其发送到LFI页面。
5.当我们得到文件名时,第一个套接字连接还没有结束,这意味着临时文件仍然存在。
6通过利用时间间隔,可以包含并执行临时文件。
3.测试反弹交互shell
按照上面的方法可以写入一个php 但是感觉有些不方便 最好是直接弹一个交互shell
准备一个文件包含漏洞的环境。
网站存在phpinfo.php
修改脚本
修改包含文件页面和ip地址
kali 上监听 nc -lvnp 8080
执行exp
得到交互shell
4.脚本下载
原版脚本
修改后的脚本
原创文章,作者:moonsec,如若转载,请注明出处:https://www.moonsec.com/archives/1257