Loading

CVE-2012-1823复现

环境搭建:

Docker Desktop开启
cd /CVE-2012-1823
docker-compose up -d
image.png
本地访问80端口
image.png

分析

PHP-CGI直接将用户的请求作为了PHP-CGI的参数执行,导致远程代码的执行。
先上执行结果
image.png
image.png

PHP的运行模式:

  1. CGI

通用网关接口,接收网页浏览器的数据发送给web服务器,再把执行结果返回给浏览器
参考:CGI相当于执行了response = exec("php -f index.php -url=xxx -cookie=xxx -xxx=xxx")

  1. FastCGI

CGI的升级版本,可以一直执行,而不需要每次都需要花费事件去fork一次

  1. Cli

php的命令运行模式,可以直接启动一个php文件并执行

  1. Module加载

针对apache,把php作为apache的一个子模块运行
CGI模式下可控的命令行参数:

  1. -c指定php.ini文件的位置
  2. -n不要加载php.ini 文件
  3. -d指定配置项
  4. -b启动fastcgi进程
  5. -s显示文件源码
  6. -T执行指定次该文件
  7. -h/-?显示帮助

漏洞成因:

首先得知道为什么会将用户的请求作为了PHP-CGI的参数执行?RFC3875中规定,当querystring中不包含没有解码的=号的情况下(感觉这个理解很拗口,在原文章找到了个评论好理解些:“没有编码的=号”),要将querystring作为cgi的参数传入。
所以可以对其进行利用,使用-d来制造文件文件包含漏洞,实现远程文件包含

payload:

/index.php?-d+allow_url_include%3don+-d+auto_prepend_file%3dphp%3a
POST: <?php echo system('ls /');?>
allow_url_include=on 表示允许文件包含
auto_prepend_file 表示每次在加载访问的php文件之前都访问php://input (访问POST原始数据)

总结

emm,其实还不是非常理解querystring是怎么被CGI进行处理的,后续还会继续学习。

参考资料

https://www.freebuf.com/articles/web/213647.html
https://www.cnblogs.com/lthlsy/p/14820076.html
https://paper.seebug.org/297/
https://www.leavesongs.com/PENETRATION/php-cgi-cve-2012-1823.html
https://www.cnblogs.com/Renyi-Fan/p/9811197.html#_label0_1

posted @ 2024-01-19 17:28  crayon's  阅读(185)  评论(0)    收藏  举报