0x01.背景
PHP的配置文件中有一个Boolean参数——cgi.fix_pathinfo
,其默认为1
,即启用。
这个选项在一些服务器的一些情况下能被不怀好意者利用,具体方法如下
- 服务器具有上传点,且检查文件类型仅基于扩展名,而非Mime Type或文件内容。
- 骇客上传一个PHP的WebShell或其他恶意程序,但名为
malicious.jpg
,其被上传至{wwwroot}/upload/malicious.jpg
- 骇客访问
{domain}/upload/malicious.jpg/not_exist.php
(not_exist.php
可被替换为*.php
)malicious.jpg
中的恶意代码被PHP解析器执行,骇客得手……
0x02.Web应用的防范
经过测试,WordPress的上传检查较为严格,将包含<?php
的任何文件改扩展名均无法上传
……
0x03.HTTP服务器的防范
经过测试,在基于Apache/2.4.27
+PHP-FPM/7.1.8
的平台上该漏洞不可利用(not-exploitable)
首先设置/etc/php/7.1/fpm/php.ini
中cgi.fix_pathinfo = 1
,在网站根目录新建如下内容的文件e.jpg
:
<?php
echo shell_exec("uptime");
?>
这段PHP代码若被执行,会Print出在Shell中输入uptime
所得到的输出内容,形如:
21:46:54 up 1 day, 52 min, 1 user, load average: 0.00, 0.00, 0.00
然后访问{domain}/e.jpg/1.php
,返回404,此漏洞不可利用.