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

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

漏洞描述

Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0a将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

产生原因:apache这次解析漏洞的根本原因就是$这个表达符,在正则表达式中,我们都知道$用来匹配字符串结尾位置,我们来看看菜鸟教程中对正则表达符$的解释:

匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。要匹配 $ 字符本身,请使用 $。

因此,在设置了 RegExp 对象的 Multiline 属性的条件下,$还会匹配到字符串结尾的换行符

image-20230723110438263

环境搭建

使用vulhub靶场环境进行漏洞复现

进入到vulhub文件夹进入对应目录,执行命令开启漏洞环境

docker compose build
docker compose up -d

image-20230723110722687

查看是否启动成功
docker ps
或docker-compose ps
查看对应的端口,查看ip,访问即可

image-20230723110915374

查看ip地址
ifconfig
访问:
http://your-ip:8080

成功访问,环境如下:

接下来进行复现即可

image-20230723111117026

详细的搭建步骤参考官方链接:https://vulhub.org

漏洞复现

正常的去上传一个php文件看能否上传上去,上传后发现无法正常的上传

image-20230723111710427

提交后:

image-20230723111729046

根据源码发现为黑名单限制,无法上传php等一系列后缀的文件

image-20230723111537545

源码:

<?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 {

?>
    ...

分析代码文件名$name是接受POST请求中的数据,因为POST接收不会去掉我们添加的\n,如果使用 $_FILES[‘file’][‘name’]去接收文件名,则会吧\n去掉,所以要满足此漏洞 的条件之一就是使用POST接收文件名。

$ext等于POST中的文件名后缀,所以文件名不能是[‘php’, ‘php3’, ‘php4’, ‘php5’, ‘phtml’, ‘pht’],但是 可以是php\n的这种方式,就绕过了if判断,同时这样的文件还以被解析成PHP

跟进配置文件

<FilesMatch \.php$>

看到在正则中是 \.php$,因为结尾有个$符号,结合上述原理, $匹配配 ‘\n’ 或 ‘\r’,所以我们修 改数据包在文件名后加\n, \n的十六进制为0a

通过以上的分析,我们再次上传,使用bp抓包,修改数据包的十六进制信息

image-20230723120523317

找到此处,可以将0d修改为0a,或者不修改直接插入0a也可以,均可实现。修改完成后放包即可

image-20230723120646113

可发给重发器进行测试,看是否能上传成功

image-20230723120823839

观察网页的变化和提示,没有错误的提示,空白,说明上传成功

image-20230723120703458

访问该上传的文件,看是否被解析,成功被解析

http://192.168.100.134:8080/cmd.php%0a

image-20230723120931850

同理将php一句话换成一句话木马,即可getshell获取权限,使用蚁剑连接即可

image-20230723121333462

蚁剑连接:

成功连接,并正常进入

image-20230723121424189文章不妥之处,欢迎批评指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值