解析漏洞

2019/06/11 safety

解析漏洞【高危】

原理概述

所谓解析漏洞,即web容器对于文件的内容没有按照预期的方式进行解析,比如将.jpg文件按照PHP代码去解析,在这种情况下就可使得黑客通过上传一个.jpg文件就能获取网址控制权,进一步可能获取服务器控制权并渗透内网,比较常见的解析漏洞有两类,即nginx解析漏洞和apache解析漏洞,现分述如下:

Apache解析漏洞

apache如果以module方式运行PHP的话,对于文件名的解析是从后向前解析的,一直遇到一个apache”认识”的文件类型为止,比如:hack.php.xxx.sss.helloworld因为其中的.helloworld .sss .xxx都是黑客随手写的后缀,apache肯定是不认识的,所以会一直从后向前遍历到.php,然后将其作为一个php文件进行解析,而apache到底认识哪些后缀的文件,是在apache的conf/mime.types文件中定义的。

Nginx解析漏洞

Nginx以Fast-Cgi方式运行PHP时,对于任意的后缀名文件,只要加上/x.php(即使这个x.php并不存在)那么也会将文件作为PHP文件解析,比如http://www.test.com/logo.png/1.php就算1.php不存在,logo.png中的内容也会被当作PHP代码运行,此时会大大降低黑客的攻击门槛,因为只需要上传含有php代码的图片文件(而图片文件一般都是允许上传的)就能在服务器上执行任意的PHP代码。

修复建议

1.对于apache的解析漏洞,可以在httpd.conf配置文件中添加以下内容来阻止外部访问这类文件

1.<Files ~ "\.(?i:ph.)">

2.Order Allow,Deny

3.Deny from all

4.</Files>

或者可用如下设置阻止apache解析脚本

1.#本例为禁止upload目录下解析PHP脚本

2.<Directory ~ "/upload">

3. Options FollowSymLinks

4. AllowOverride None

5. Order allow,deny

6. Allow from all 

7. php_flag engine off

8.</Directory>

也可以在不想解析PHP的目录下面创建.htaccess文件,里面加入如下代码即可

1.php_flag engine off

2.对于Nginx的解析漏洞,可以关闭php.ini中的cgi.fix_pathinfo选项

1.cgi.fix_pathinfo=0

或者做如下配置,禁止访问特定目录下的脚本文件

1.#本例为禁止访问/upload目录下的脚本

2.location ~ ^.*/upload/.*\.(ph.*)$  {        

3.          deny all;

4.}
1.#禁止访问如/1.jpg/x.php这样的链接

2.location ~* /((.*)\.(.*)\/(.*)\.php){

3.    deny all;

4.}

Search

    Table of Contents