解析漏洞总结
0x01 什么是解析漏洞?
简单的说,解析漏洞就是web容器将其他格式的⽂件解析为可执⾏脚本语⾔,攻击者可以利⽤这个特征去执⾏⼀些攻击⾏为。oxo2 概述
通常会出现解析漏洞的web容器有IIS 6.0、Nginx、Apache。
0x03 IIS解析漏洞
使⽤IIS6.0的服务器,⼀般是Windows server 2003,解析语⾔是asp,不能解析aspx语⾔。
利⽤⽅式
1. ⽬录解析
在⽹站⽬录*.asp、*.asa下的任何扩展名的⽂件格式都会被解析为asp并执⾏
在⽬录*.asp下,*.txt⽂本⽂件被解析
⼜如*.jpg、*.png类图⽚格式被解析为asp
2.⽂件解析
在IIS6.0上,分号;后⾯的不解析。
如*.asp;.jpg会被解析为*.asp即将jpg图⽚格式解析为了asp可执⾏脚本⽂件。
在⽹站⽬录下创建⽂件
访问上⾯创建的⽂件,可以看到被解析为了asp⽂件并执⾏
3. 其他默认可执⾏⽂件格式
1. *.asa
2. *.cer
3. *.cdx(这种格式也会解析,但是和版本有关,⽐如我在测试的时候发现并不能,后⾯有证明)
4. *.asa⽂件被解析
*.cer⽂件被解析
从下图看到*.cdx⽂件,并没有并解析,⽽是当做普通的⽂本⽂件。
4. 漏洞案例
0x04 Nginx解析漏洞
1. Nginx畸形解析漏洞
该漏洞经测试发现与Nginx版本⽆关,只与配置环境有关。
测试环境
Nginx 1.14.0
php 7.2.10
测试
在⽹站⽬录下创建⽂件demo2.jpg,然后再浏览器中访问192.168.11.131/test2/demo2.jpg/aaa.php,
服务器并没有回馈⽬录或者⽂件不存在,⽽是请求拒绝。原因是在nginx中,服务器对请求的内容是从右向左的,当发现并没有aaa.php这个⽂件时,就会去请求demo2.jpg,以此类推。这就是nginx畸形解析漏洞的利⽤⽅式。
⾸先该解析漏洞的发⽣时有条件的但是与版本⽆关,在php配置⽂件php.ini,在⽂件在⽬录/usr/local/php/lib下,其中有⼀个选
项cgi.fix_pathinfo,它的值⼀般为1,作⽤是为了当⽂件不存在时,阻⽌Nginx将请求发送到后端的PH
P-FPM模块,例如这⾥aaa.php并不存在,这时候就会将demo2.php当做php⽂件来解析,从⽽导致恶意脚本注⼊的攻击,即解析漏洞。
但是cgi.fix_pathinfo=1有其存在的必要性,赋值为1会丧失服务器⼀部分解析能⼒,所以在后来的⾼版本php中增加了对⽂件后缀名解析的⽩名单,该配置⽂件f在⽬录/usr/local/php/etc/php-fpm.d下
从截图上⾯的说明中,可以发现,如果将security.limit_extensions值改为empty,则会允许所有扩展名。
乌云漏洞利⽤案例
2. 空字节解析漏洞
漏洞版本
nginx 0.5.*
nginx 0.6.*
nginx 0.7 <= 0.7.65
nginx 0.8 <= 0.8.37
上述版本在Nginx已经不再提供,所以⽆法演⽰。
利⽤⽅式
127.0.0.1/demo2.jpg%2500.php
nginx和apache区别通过上述url访问嵌⼊php代码的图⽚
0x05 Apache解析漏洞
漏洞原因
Apache解析⽂件的时候是按照从右向左的⽅式,
如请求192.168.11.132/php.ras,Apache⽆法解析.ras,向左解析到.php,于是就把该请求交给php模块去处理,于是⽂件php.ras就会被解析为php可执⾏⽂件,如果在这个⽂件中写⼊php可执⾏代码,那就,,,,,这就是Apache解析漏洞,该漏洞在旧版本中存在,但是在新版本中修复了。
如果遇到⽆法解析的⽂件后缀类型,会按默认处理⽅式认为是txt⽂本⽂件,如192.168.11.132/test1/asa.asd.sss.cdf
再次发掘
这⾥我测试的Apache版本为Apache2.4.23
前⾯讲到,Apache在遇到⽆法解后缀名⽂件时,会把请求交给php模块去处理,那么php模块究竟是怎么处理的呢?查看Apache的配置⽂件f,
可以看到,php模块会对⽂件后缀名进⾏检查,⽽且检查⽅式是看⽂件名是不是以.php结尾。
我们请求在⽹站⽬录下的demo2.php.scd.sss.cdr⽂件,从下图也验证了php模块对⽂件后缀名进⾏检
查的⽅式是看⽂件名是不是以.php结尾。如果不是,仍然是当做普通⽂本来处理的。
我们修改⼀下配置⽂件f中对php⽂件的识别⽅式,只要⽂件名中包含.php,就以PHP去解析执⾏,如:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论