解析漏洞总结

解析漏洞总结
Yatming的博客解析漏洞总结
0x00 服务器解析漏洞
服务器解析漏洞一般是服务器自身或扩展组件带来的漏洞,配合文件上传等漏洞就会产生很大的危害。
我们这里整理常见的服务器apache、IIS、nginx的解析漏洞。
0x01 apache
一、不可识别解析
apache解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 test.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.owf.rar解析成php。
apache版本在以下范围内
- Apache 2.0.x <= 2.0.59
- Apache 2.2.x <= 2.2.17
- Apache 2.2.2 <= 2.2.8
都可以通过上传xxx.php.rar或xxx.php+任意无法解析后缀解析为php。
二、配置问题
- 1.如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。
- 2.如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是 jpg,一样能以 php 方式执行。
三、罕见后缀
Apache配置文件中会有.+.ph(p[345]?|t|tml)此类的正则表达式,被当php程序执行的文件名要符合正则表达式。也就是说php3,php4,php5,pht,phtml等文件后缀也是可以被当作php文件进行解析的。
四、后缀包含换行符\x0A
CVE-2017-15715:Apache 2.4.0-2.4.29中,上传一个后缀末尾包含换行符的文件,来绕过FilesMatch。绕过FilesMatch不一定能被PHP解析。
0x02 IIS
一、目录解析
在IIS-6.0的版本,在.asp或.asa文件夹下的所有类型后缀文件全部解析为.asp文件。
存在数据库备份功能的系统并且备份路径可控的话经常会出现这个问题。
二、文件解析
在IIS-6.0的版本,服务器默认不解析;后面的内容,所以xxx.asp;.jpg会被解析成xxx.asp。
三、其他解析类型
在IIS6.0的版本,如下几种文件类型也会被执行。
- xxx.asa
- xxx.cer
- xxx.cdx
四、php-cgi漏洞
在IIS-7.0和IIS-7.5的版本,在php配置文件中,开启cgi.fix_pathinfo,然后上传一个1.jpg的一句话木马文件。然后用菜刀访问1.jpg/.php即可连接一句话木马。
五、IIS7.0
畸形解析漏洞
将文件保存成test.jpg格式,上传到服务器后,/test.jpg/x.php,此时test.jpg将会被服务器当成php文件执行,所以图片里面的代码就会被执行。我们会发现在目录下已经创建了一个一句话木马文件 test.php 。
0x03 nginx
一、低版本nginx
空字节代码执行漏洞:nginx 0.5.x、nginx 0.6.x、Nginx 0.7-0.7.65、Nginx 0.8-0.8.37中可以通过在任意文件名后面增加%00.php解析为php,如1.jpg%00.php
nginx<0.8.03
畸形解析漏洞
将文件保存成test.jpg格式,上传到服务器后,/test.jpg/x.php,此时test.jpg将会被服务器当成php文件执行,所以图片里面的代码就会被执行。我们会发现在目录下已经创建了一个一句话木马文件 test.php 。
主要原因是Nginx拿到文件路径(更专业的说法是URI)/test.jpg/test.php 后,一看后缀是.php,便认为该文件是php文件,于是转交给php去处理。php一看 /test.jpg/test.php 不存在,便删去最后的/test.php,又看/test.jpg存在,便把/test.jpg当成要执行的文件了,又因为后缀为.jpg,php认为这不是php文件,所以就以php解析执行了。
二、php-cgi漏洞
和IIS的第四点相同,在php配置文件中,开启了cgi.fix_pathinfo,导致图片马1.jpg可以通过访问1.jpg/.php、1.jpg%00.php解析成php文件
0x04 windows解析漏洞
Windows操作系统中,文件名不能以空格或.开头,也不能以空格或.结尾。当把一个文件命名为以空格或.开头或结尾时,会自动地去掉开头和结尾处的空格和.。利用此特性,也可能造成文件解析漏洞
另外一种手法:上传一个名字为test.jpg图片马,然后访问test.jpg/.php,在这个目录下就会生成一句话木马test.php。
0x05 应对
- 1.对于php-cgi漏洞,可以修改php.ini文件,将cgi.fix_pathinfo的值设置为0
- 2.使用白名单匹配文件后缀名
- 3.可以对上传后的文件固定后缀,并对之前的所有字符进行重命名
.htaccess文件
.htaccess 文件生效前提条件为:mod_rewrite 模块开启且AllowOverride All
列举两个利用方式:
#1:这个.htaccess的意思就是把所有名字里面含有shell的文件当成php脚本来执行
<FilesMatch “shell”>
SetHandler application/x-httpd-php
#2:这里代码的意思可以让 .jpg后缀名文件格式的文件名以php格式解析
AddType application/x-httpd-php .jpg
参考链接:
1 | https://blog.51cto.com/u_15061952/3504394 |