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
他们的坚强他们的梦
他们的苦只有自己懂