原理
Apache官网给出的漏洞信息
翻译过来
参考链接:http://httpd.apache.org/security/vulnerabilities_24.html
什么是?
在apache配置文件中用来做访问控制之用,比如可配置某目录下,禁止访问PHP文件。
如何利用??
在默认配置下, “上传”一个带“换号符”的php文件上去,使用http://ip/test.php%0a访问,可直接解析PHP内容。
如下图,已上传一个“6.php换行符”文件。(上传过程后文有记载,在linux可使用如下方法发现文件名后面有换行符:“cat 文件名前部分+Tab键”,如cat 6.p+Tab键)
浏览器访问:http://192.168.131.136/upload/upload-labs/master/upload//6.php%0a(访问链接最后加%0a)
不加%0a会显示无此文件
Apache情况说明
默认情况下,apache2.4.x使用了(在/etc/httpd/conf.d/php.conf文件),故可利用。该配置代表解析php。
利用
环境:centos7+httpd2.4.6+php5.6
情况一:在代码层采用黑名单策略防止上传
代码如下:
上传PHP文件
直接无法上传
对上传包进行以下修改:在1.php后添加\x0a,成功上传
访问该图片链接并在后面加%0a,成功解析。(也可是是一个shell)
情况二:在apache配置文件中进行如下配置:上传目录php目录禁止访问。(但以$做正则匹配)
此方法无法直接利用解析漏洞!!!
httpd.conf文件做如下配置
发现无法解析
证明”$”符号起到了限制效果。
情况三:在apache配置文件中进行如下配置:上传目录不做PHP文件的解析。(但以$做正则匹配)
此方法无法直接利用解析漏洞!!!
httpd.conf文件做如下配置
可绕过限制访问其中的php文件(“1.php换行符”是包含的图片马)
发现可绕过是否是PHP文件的检测,但不对其代码进行解析。
利用条件
文件上传采取黑名单策略(或直接任意文件上传);
获取文件名时不能用“去掉换行”的函数,比如$_FILES['file']['name'];
在上传目录下,文件有执行权限和解析权限
Apache在配置文件中采用了“$”做PHP解析的正则匹配(其他情况不行),如下图。
影响版本
Apache 2.4.29-2.4.25, 2.4.23, 2.4.20
Apache 2.4.18-2.4.16, 2.4.12, 2.4.10
Apache 2.4.9, 2.4.7, 2.4.6, 2.4.4-2.4.1
所有版本均存在,只不过默认情况下,apache2.4.x版本有如下配置(其他版本亲测有效)
欢迎各位大佬批评指正!
领取专属 10元无门槛券
私享最新 技术干货