解析漏洞总结

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. 漏洞案例

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
在这里插入图片描述
服务器并没有回馈目录或者文件不存在,而是请求拒绝。原因是在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文件来解析,从而导致恶意脚本注入的攻击,即解析漏洞。
在这里插入图片描述
但是cgi.fix_pathinfo=1有其存在的必要性,赋值为1会丧失服务器一部分解析能力,所以在后来的高版本php中增加了对文件后缀名解析的白名单,该配置文件www.conf在目录/usr/local/php/etc/php-fpm.d
在这里插入图片描述
从截图上面的说明中,可以发现,如果将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

通过上述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
在这里插入图片描述

再次发掘

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

再次请求http://192.168.11.132/test1/demo2.php.scd.cdr.saa,发现文件被正常解析为PHP文件
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值