之前就看了这个漏洞,但是当时没有认真思考叫因为只是一个%0a绕过就OK
没有理解原理,现在来填坑
环境启动与版本漏洞
1.在apache2.40~2.4.29版本中存在这个漏洞
2.这么我使用的是vulhub环境搭建
进入目录编译及运行漏洞环境:
docker-compose build
docker-compose up -d
启动后Apache运行在http://your-ip:8080**
漏洞原理
在该版本的配置中
<FilesMatch .php > S e t H a n d l e r a p p l i c a t i o n / x − h t t p d − p h p < / F i l e s M a t c h > 123 该 部 分 内 容 就 是 只 有 匹 配 上 面 的 正 则 表 达 式 就 可 以 进 行 绕 过 使 用 我 们 在 看 一 看 正 则 表 达 式 中 > SetHandler application/x-httpd-php </FilesMatch> 1 2 3 该部分内容就是只有匹配上面的正则表达式就可以进行绕过 使用我们在看一看正则表达式中 >SetHandlerapplication/x−httpd−php</FilesMatch>123该部分内容就是只有匹配上面的正则表达式就可以进行绕过使用我们在看一看正则表达式中的意思
匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。要匹配 $ 字符本身,请使用 $。
所以如果设置RegExp 对象的 Multiline 属性的条件下,$还会匹配到字符串结尾的换行符(也就是%0a)
实验
上传一个名为1.php的文件,被拦截:
在1.php后面插入一个\x0A(注意,不能是\x0D\x0A,只能是一个\x0A),不再拦截:
访问刚才上传的/1.php%0a,发现能够成功解析,但这个文件不是php后缀,说明目标存在解析漏洞:
总结:
其实主要是$的漏洞
下面是自己出的一个题目
参考
https://vulhub.org/#/environments/httpd/CVE-2017-15715/
https://www.leavesongs.com/PENETRATION/apache-cve-2017-15715-vulnerability.html