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

之前就看了这个漏洞,但是当时没有认真思考叫因为只是一个%0a绕过就OK
没有理解原理,现在来填坑

环境启动与版本漏洞
1.在apache2.40~2.4.29版本中存在这个漏洞
2.这么我使用的是vulhub环境搭建
进入目录编译及运行漏洞环境:
docker-compose build
docker-compose up -d
启动后Apache运行在http://your-ip:8080**

漏洞原理
在该版本的配置中

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

该部分内容就是只有匹配上面的正则表达式就可以进行绕过
使用我们在看一看正则表达式中$的意思

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

所以如果设置RegExp 对象的 Multiline 属性的条件下,$还会匹配到字符串结尾的换行符(也就是%0a)

实验
上传一个名为1.php的文件,被拦截:

在1.php后面插入一个\x0A(注意,不能是\x0D\x0A,只能是一个\x0A),不再拦截:

访问刚才上传的/1.php%0a,发现能够成功解析,但这个文件不是php后缀,说明目标存在解析漏洞:

总结:
其实主要是$的漏洞
下面是自己出的一个题目

<?php
//by Firebasky
show_source(__FILE__);
//error_reporting(0);
include('flag.php');
$a=$_GET['cmd'];
if(preg_match('/^php$/im', $a)){
    if(preg_match('/^php$/i', $a)){
        echo 'hacker';
    }
    else{
        echo $flag;
    }
}
else{
    echo 'nonononono';
}
?>

参考
https://vulhub.org/#/environments/httpd/CVE-2017-15715/
https://www.leavesongs.com/PENETRATION/apache-cve-2017-15715-vulnerability.html

posted @ 2020-08-17 17:52  Firebasky  阅读(662)  评论(0编辑  收藏  举报