Apache HTTPD 换行解析漏洞(CVE-2017-15715)

漏洞简介

Apache HTTPD 是一款 HTTP 服务器,它可以通过 mod_php 来运行 PHP 网页

漏洞影响版本:2.4.0~2.4.29版本

在解析 PHP 时,1.php\x0A 将被按照 PHP 后缀进行解析,导致绕过一些服务器的安全策略

漏洞环境

相关命令

# cd vulhub/httpd/CVE-2017-15715/
# docker-compose build
# docker-compose up -d
# docker-compose ps
         Name                  Command         State          Ports        
---------------------------------------------------------------------------
cve-2017-15715_apache_1   apache2-foreground   Up      0.0.0.0:8080->80/tcp

漏洞复现

访问存在漏洞的页面
在这里插入图片描述

上传一句话木马 webshell.php 并使用 burp suite 抓包,在如下所示位置加上一个 + 号,以便定位(+号的16进制是0x2b)
在这里插入图片描述
切换 16 进制修改包,找到 + 号的位置,也就是 2b,将其修改为 0a,然后放包即可成功上传一句话木马
在这里插入图片描述

访问刚才上传的/evil.php%0a,发现能够成功解析,但这个文件不是PHP后缀,说明存在解析漏洞
在这里插入图片描述

漏洞原理

查看 PHP 配置文件,vulhub 里没有,需要进入容器内部查看

发现其将当前目录下符合正则表达式 .php$ 的所有文件,都当作 PHP 文件解析

而 $ 符号可以匹配换行符 “\n”,也就是16进制的 0x0a,所以存在解析漏洞

//进入容器
# docker exec -it 0e33c6d54c10 /bin/bash

//查看 PHP 配置文件
# 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>

查看源码,发现获取 $name 获取的是以 POST 方式提交的 name 值,该值默认为 evil.php,是用户可以控制的
只对 $name 做了后缀黑名单检查,并没有对我们所上传的文件名做任何检查(绕过方式有很多)
我们控制 POST 方式提交的 name 值,在其后缀后加上了换行符,绕过了后缀黑名单正常上传
并且,由于上述PHP配置文件所存在的原因,导致我们的 evil.php%0a 可以被当作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
}
?>

漏洞修复

1.对中间件进行升级

2.将上传的文件重命名为为时间戳+随机数+.jpg的格式

3.上传时采用白名单的验证方式

4.禁用上传文件的执行权限
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值