【漏洞复现】Apache HTTPD 换行解析漏洞 (CVE-2017-15715)

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 修复建议

  1. 升级版本
  2. 利用时间戳、随机数等方法对上传文件进行重命名
  3. 禁止上传文件执行

posted @ 2023-03-12 21:59  0dot7  阅读(382)  评论(0编辑  收藏  举报