Apache简介:
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台被广泛使用,是最流行的Web服务器端软件之一。同时Apache的漏洞也层出不穷,甚至Struts2安全漏洞频出 ,也和Apache官方代码有关。所以我们这次要对Apache一些解析漏洞复现,希望可以得到一些启发。
Apache解析漏洞
未知扩展名解析漏洞
这个解析漏洞是根据Apache的一个特性:Apache从最右边后缀开始识别,如果该后缀无法识别(即不在mine.types文件中),就会继续向右识别,直到识别成功才解析。
e.g:phpinfo.php.test 解析为:phpinfo.php
值得注意的是:在实际的应用中,可以通过上传”php.xxx”应用,但是不能上传”php.jpg”因为jpg在mine.types中就会识别成jpg图片文件。
AddHandler导致的解析漏洞
在上面的解析漏洞中,jpg会被识别
但是,如果运维人员给.php后缀增加了处理器:
AddHandler application/x-httpd-php .php我们在http.conf增加上面的处理器(之后重启server)



那么只要文件名中含有.php后缀,即被识别成PHP文件
利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。
HTTPD 换行解析漏洞(CVE-2017-15715)
1、影响范围:2.4.0~2.4.29版本(在Windows下,不允许以换行符文件结尾的后缀,所以Windows服务器无法利用。)
2、复现过程:
1、通过docker拉取一个Apache版本在2.4.0~2.4.29之间的。我这里用的是Apache 2.4.10

#拉取一个apache+php的docker镜像
docker pull webimp/php-55-apache:latest2、启动docker
#创建存放Apache的目录
mkdir apache2
#守护启动,并且将本机的80和容器的80做端口映射、配置数据卷
docker run -id -p 80:80 -v $PWD/www/html:/var/www/html3、编写测试代码放在本机的$PWD/www/html/index.php
<html>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="text" name="name" />
<input type="submit" value="uploadfile" />
</form>
</body>
</html>
<?php
if(isset($_FILES['file'])) {
$name = basename($_POST['name']);
$ext = pathinfo($name,PATHINFO_EXTENSION);
if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {
exit('bad file');
}
move_uploaded_file($_FILES['file']['tmp_name'], './' . $name);
}4、在下面页面用burp抓包进行分析:

在phpinfo.php后面添加一个“.”之后到Hex
将2e(表示.)改为0a(表示换行),之后上传即可。
我们可以看到上传成功了,phpinfo正常解析。

3、参考:
https://www.leavesongs.com/PENETRATION/apache-cve-2017-15715-vulnerability.html
解析漏洞修复建议
1. 升级到最新版本
2. 将上传的文件重命名为为时间戳+随机数+.jpg的格式并禁用上传文件目录执行脚本权限。尾巴:
通过总结上面的Apache解析漏洞可以在实战中过程中应用更加的得心应手。一般这些漏洞可能会出现在“及其隐蔽的子域中”,所以我们要耐心观察版本,加以应用。
声明:
笔者初衷用于分享与交流网络知识,若读者因此作出任何危害网络安全行为后果自负,与作者无关!
本文属于@ayoung博客,未经许可禁止转载: