Apache HTTPD 换行解析漏洞 (CVE-2017-15715)
0x01 漏洞描述
Apache HTTPD是一款HTTP服务器,它可以通过mod_PHP来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,shell.PHP\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
0x02 影响版本
Apache HTTPD 2.4.0~2.4.29
0x03 漏洞分析
此漏洞的出现是由于 apache 在修复第一个后缀名解析漏洞时,用正则来匹配后缀。在解析 php 时 xxx.php\x0A 将被按照 php 后缀进行解析,导致绕过一些服务器的安全策略。
index.php源码:
<?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);
} else {
?>
<!DOCTYPE html>
<html>
<head>
<title>Upload</title>
</head>
<body>
<form method="POST" enctype="multipart/form-data">
<p>
<label>file:<input type="file" name="file"></label>
</p>
<p>
<label>filename:<input type="text" name="name" value="evil.php"></label>
</p>
<input type="submit">
</form>
</body>
</html>
<?php
}
?>
以POST请求方式传入参数name,并通过设置黑名单来过滤后缀。
配置文件:
#cat /etc/apache2/conf-available/docker-php.conf
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
DirectoryIndex disabled
DirectoryIndex index.php index.html
<Directory /var/www/>
Options -Indexes
AllowOverride All
</Directory>
.php$
使用$来匹配以.php为后缀的文件,那么在文件名后插入换行符\x0A
则可以绕过php黑名单,实现文件上传。
0x04 漏洞复现
使用vulhub靶场,编译运行漏洞环境:
cd vulhub/httpd/CVE-2017-15715
docker-compose build
docker-compose up -d
访问http://ip:8080,显示如下页面:
正常上传php文件,返回bad file
修改name参数值,点击hex,找到文件名,在.php后插入一个换行符\x0A,文件上传成功
访问http://ip:8080/evil.php%0a,出现phpinfo信息,说明上传后解析成功。
0x05 修复建议
- 升级版本
- 利用时间戳、随机数等方法对上传文件进行重命名
- 禁止上传文件执行
标签:HTTPD,解析,漏洞,PHP,Apache,CVE,php From: https://www.cnblogs.com/0dot7/p/17209300.html