漏洞原理:

Apache 默认一个文件可以有多个以点 “.” 分割的后缀,当右边的后缀名无法识别时,则继续向左识别。

形成原因:

配置apache时,配置命令存在问题:

位于漏洞环境目录的 conf/docker-php.conf里的配置命令AddHandler application/x-httpd-php .php

该命令会将后缀中只要含有.php的文件都会被处理程序解析,这导致攻击者可通过多后缀绕过文件上传限制以.php结尾的机制,并使之被处理程序执行。

漏洞复现:

Apache 多后缀解析漏洞

1.写一个木马文件,后缀为.php.jpg

2.进行文件上传

3.提交后,看到上传成功,并且直接返回了文件上传路径

4.用蚁剑进行连接

5.根目录下,看到flag文件,或者终端中运用env指令(查看环境变量),这里把flag设置为了环境变量

防御方法:

注释或删除原先配置命令

1.拒绝所有文件名含有.php的文件

1
2
3
<FilesMatch "\.php\.">
require all denied
</FilesMatch>

2.仅当文件名严格以 .php 结尾时,才将其作为 PHP 脚本执行

1
2
3
<FilesMatch ".+.php$">
SetHandler application/x-httpd-php
</FilesMatch>