caoz群里有大佬们问到这个事,作为一个炒粉,我简单的解释一下来龙去脉。
一、缘起:
1、攻击代码
国际知名的漏洞攻击代码发布机构 exploit-db发布了一个针对apache+php的攻击代码,作者为著名国际黑客Kingcope。详见 http://www.exploit-db.com/exploits/29290/
攻击效果图源于网络
2、漏洞
实际上这个漏洞在2012年5月份就被发现了,php官方也修复了这个漏洞。
详见 http://eindbazen.net/2012/05/php-cgi-advisory-cve-2012-1823/
3、成因
php作为cgi模式运行的时候,接受-s -d -c 这样的参数,我们看看这些参数的功能
-s Output HTML syntax highlighted source -d foo[=bar] Define INI entry foo with value bar
然后再看看攻击代码片段
char poststr[] = "POST %s?%%2D%%64+%%61%%6C%%6C%%6F%%77%%5F" \ "%%75%%72%%6C%%5F%%69%%6E%%63%%6C%%75%%64%%65%%3D%%6F%%6E+%%2D%%64" \ "+%%73%%61%%66%%65%%5F%%6D%%6F%%64%%65%%3D%%6F%%66%%66+%%2D%%64+%%73" \ "%%75%%68%%6F%%73%%69%%6E%%2E%%73%%69%%6D%%75%%6C%%61%%74%%69%%6F%%6E" \ "%%3D%%6F%%6E+%%2D%%64+%%64%%69%%73%%61%%62%%6C%%65%%5F%%66%%75%%6E%%63" \ "%%74%%69%%6F%%6E%%73%%3D%%22%%22+%%2D%%64+%%6F%%70%%65%%6E%%5F%%62" \ "%%61%%73%%65%%64%%69%%72%%3D%%6E%%6F%%6E%%65+%%2D%%64+%%61%%75%%74" \ "%%6F%%5F%%70%%72%%65%%70%%65%%6E%%64%%5F%%66%%69%%6C%%65%%3D%%70%%68" \ "%%70%%3A%%2F%%2F%%69%%6E%%70%%75%%74+%%2D%%64+%%63%%67%%69%%2E%%66%%6F" \ "%%72%%63%%65%%5F%%72%%65%%64%%69%%72%%65%%63%%74%%3D%%30+%%2D%%64+%%63" \ "%%67%%69%%2E%%72%%65%%64%%69%%72%%65%%63%%74%%5F%%73%%74%%61%%74%%75%%73" \ "%%5F%%65%%6E%%76%%3D%%30+%%2D%%6E HTTP/1.1\r\n" \
解码出来是
%s?-d allow_url_include=on -d safe_mode=off -d suhosin.simulation3Don -d disable_functions="" -d open_basedir=none -d auto_prepend_file=php://input -d cgi.fo"rce_redirect=0 -d cgi.redirect_status_env=0 -n
这样Kingcope的攻击代码思路就出来了。
关闭各种防护的参数,打开各种危险的参数,最后利用auto_prepend_file(或auto_append_file)这个参数把黑客需要执行的系统命令传递过去了。
二、利用条件
不少同学关注利用条件,针对上述公开的exp,总结一下,要利用这个漏洞,必须同时满足如下条件:
1、apache+php是用cgi模式跑的,例如apache的mod_cgid
2、php解释器需要可以从下面的url访问到,当然或许可能是其他的url,这个具体要看你的配置
/cgi-bin/php /cgi-bin/php5 /cgi-bin/php-cgi /cgi-bin/php.cgi /cgi-bin/php4
3、php版本
PHP版本小于5.3.12
PHP版本小于5.4.2
三、防护
0、升级到php的最新稳定版
1、如果你有web应用防火墙,那么可以在waf上拦截上述url及利用到的关键字,(小心黑客用一些编码技巧绕过你的规则)然后给运维充足的时间去升级。扯远一点,waf部署容易运营难,这也是为什么好些公司部署了waf但是依然web被黑的原因之一。
2、如果你没有waf,又想为升级php争取时间,可以考虑下列rewrite规则
RewriteEngineon RewriteCond%{QUERY_STRING}^[^=]*$ RewriteCond%{QUERY_STRING}%2d|\-[NC] RewriteRule.?-[F,L]
四、FAQ
Q:nginx+php fastcgi模式是否受这个攻击代码影响?
A:暂时不受公开的攻击代码影响,但有空最好还是升级一下php。
Q:nginx+php+fpm模式是否受这个攻击代码影响?
A:暂时不受公开的攻击代码影响,但有空最好还是升级一下php。