Apache换行解析漏洞(CVE-2017-15715)
-
影响版本
Apache httpd 2.4.0 ~ 2.4.29 -
原理
apache在修复第一个后缀名解析漏洞时,用正则表达式匹配后缀。在正则表示式中,$
用来匹配字符串结尾位置,但如果设置了RegExp对象的Multiline属性,$
也匹配\n
或者\r
,
#httpd解析php文件的表达式
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
#<FilesMatch> 中指定的表达式可以将“$”匹配到恶意文件名中的换行符,而不是仅匹配文件名的末尾。这可以在某些文件的上传被外部阻止的环境中被利用,但只能通过匹配文件名的尾随部分
由于是黑名单匹配,所以我们的上传可以成功,并且在解析时会匹配换行符,我们访问时在php后加上%0a即可正常访问。
漏洞复现
-
打开环境,可以清晰的发现是一个文件上传点,我们首先选择对其查看源码
-
源码中并无法确认是属于什么类型的文件上传,但是文件上传只是一个站的其中一个功能,选择对这个站进行信息搜集
-
发现其中间件有Apache,且Apache版本为2.4.10
-
搜寻到Apache的换行解析漏洞,通过bp抓包上传一个一句话的.php文件并在其后缀加上换行符
-
将其发包,通过phpinfo();函数判断其是否上传成功并获取shell