会飞的鱼

奇乐云
首页 » 信息安全 » 各种解析漏洞总结

各种解析漏洞总结

0x01 什么是解析漏洞?
简单的说,解析漏洞就是web容器将其他格式的文件解析为可执行脚本语言,攻击者可以利用这个特征去执行一些攻击行为。

oxo2 概述
通常会出现解析漏洞的web容器有IIS 6.0、Nginx、Apache。

0x03 IIS解析漏洞
使用IIS6.0的服务器,一般是Windows server 2003,解析语言是asp,不能解析aspx语言。

利用方式
1. 目录解析
在网站目录*.asp、*.asa下的任何扩展名的文件格式都会被解析为asp并执行
在目录*.asp下,*.txt文本文件被解析
2018092210150417.png
又如*.jpg、*.png类图片格式被解析为asp

20180922101746559.png
2.文件解析
在IIS6.0上,分号;后面的不解析。
如*.asp;.jpg会被解析为*.asp即将jpg图片格式解析为了asp可执行脚本文件。
在网站目录下创建文件
20180922102709858.png
访问上面创建的文件,可以看到被解析为了asp文件并执行

20180922102917674.png
3. 其他默认可执行文件格式
*.asa
*.cer
*.cdx(这种格式也会解析,但是和版本有关,比如我在测试的时候发现并不能,后面有证明)
*.asa文件被解析
20180922103444212.png
*.cer文件被解析
20180922103527403.png
从下图看到*.cdx文件,并没有并解析,而是当做普通的文本文件。


4. 漏洞案例
http://wooyun.jozxing.cc/static/bugs/wooyun-2011-02631.html
http://wooyun.jozxing.cc/static/bugs/wooyun-2011-02632.html

0x04 Nginx解析漏洞
1. Nginx畸形解析漏洞
该漏洞经测试发现与Nginx版本无关,只与配置环境有关。

测试环境
Nginx 1.14.0
php 7.2.10

测试
在网站目录下创建文件demo2.jpg,然后再浏览器中访问http://192.168.11.131/test2/demo2.jpg/aaa.php,
20180923001309179.png
服务器并没有回馈目录或者文件不存在,而是请求拒绝。原因是在nginx中,服务器对请求的内容是从右向左的,当发现并没有aaa.php这个文件时,就会去请求demo2.jpg,以此类推。这就是nginx畸形解析漏洞的利用方式。

首先该解析漏洞的发生时有条件的但是与版本无关,在php配置文件php.ini,在文件在目录/usr/local/php/lib下,其中有一个选项cgi.fix_pathinfo,它的值一般为1,作用是为了当文件不存在时,阻止Nginx将请求发送到后端的PHP-FPM模块,例如这里aaa.php并不存在,这时候就会将demo2.php当做php文件来解析,从而导致恶意脚本注入的攻击,即解析漏洞。
20180923000731675.png
但是cgi.fix_pathinfo=1有其存在的必要性,赋值为1会丧失服务器一部分解析能力,所以在后来的高版本php中增加了对文件后缀名解析的白名单,该配置文件www.conf在目录/usr/local/php/etc/php-fpm.d下
20180923003348203.png

从截图上面的说明中,可以发现,如果将security.limit_extensions值改为empty,则会允许所有扩展名。
乌云漏洞利用案例
https://bugs.shuimugan.com/bug/view?bug_no=45883
https://bugs.shuimugan.com/bug/view?bug_no=45883

2. 空字节解析漏洞
漏洞版本
nginx 0.5.*
nginx 0.6.*
nginx 0.7 <= 0.7.65
nginx 0.8 <= 0.8.37
上述版本在Nginx已经不再提供,所以无法演示。

利用方式
http://127.0.0.1/demo2.jpg%2500.php
1
通过上述url访问嵌入php代码的图片

0x05 Apache解析漏洞
漏洞原因
Apache解析文件的时候是按照从右向左的方式,
如请求http://192.168.11.132/test1/aaa.ccc.php.ras,Apache无法解析.ras,向左解析到.php,于是就把该请求交给php模块去处理,于是文件aaa.ccc.php.ras就会被解析为php可执行文件,如果在这个文件中写入php可执行代码,那就,,,,,这就是Apache解析漏洞,该漏洞在旧版本中存在,但是在新版本中修复了。
如果遇到无法解析的文件后缀类型,会按默认处理方式认为是txt文本文件,如http://192.168.11.132/test1/asa.asd.sss.cdf

20180923164145532.png
再次发掘
这里我测试的Apache版本为Apache2.4.23
20180923170143711.png
前面讲到,Apache在遇到无法解后缀名文件时,会把请求交给php模块去处理,那么php模块究竟是怎么处理的呢?查看Apache的配置文件httpd-php.conf,
20180923165535781.png
可以看到,php模块会对文件后缀名进行检查,而且检查方式是看文件名是不是以.php结尾。
我们请求在网站目录下的demo2.php.scd.sss.cdr文件,从下图也验证了php模块对文件后缀名进行检查的方式是看文件名是不是以.php结尾。如果不是,仍然是当做普通文本来处理的。
20180923170427634.png
我们修改一下配置文件httpd-php.conf中对php文件的识别方式,只要文件名中包含.php,就以PHP去解析执行,如:
20180923170830934.png

再次请求http://192.168.11.132/test1/demo2.php.scd.cdr.saa,发现文件被正常解析为PHP文件

20180923171640684.png

文章如无特别注明均为原创! 作者: 奇乐云, 转载或复制请以 超链接形式 并注明出处 奇乐云's blog - 奇乐云的个人博客
原文地址《 各种解析漏洞总结》发布于2019-3-31

分享到:
打赏

评论

游客

切换注册

登录

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册