解析漏洞总结

0x01 什么是解析漏洞?

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

oxo2 概述

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

0x03 IIS解析漏洞

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

利用方式

1. 目录解析

在网站目录*.asp*.asa下的任何扩展名的文件格式都会被解析为asp并执行
在目录*.asp下,*.txt文本文件被解析
解析漏洞总结_第1张图片
又如*.jpg*.png类图片格式被解析为asp
解析漏洞总结_第2张图片

2.文件解析

在IIS6.0上,分号;后面的不解析。
*.asp;.jpg会被解析为*.asp即将jpg图片格式解析为了asp可执行脚本文件。
在网站目录下创建文件
解析漏洞总结_第3张图片
访问上面创建的文件,可以看到被解析为了asp文件并执行
解析漏洞总结_第4张图片

3. 其他默认可执行文件格式

  1. *.asa
  2. *.cer
  3. *.cdx(这种格式也会解析,但是和版本有关,比如我在测试的时候发现并不能,后面有证明)
  4. *.asa文件被解析
    解析漏洞总结_第5张图片
    *.cer文件被解析
    解析漏洞总结_第6张图片

从下图看到*.cdx文件,并没有并解析,而是当做普通的文本文件。
解析漏洞总结_第7张图片

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

再次发掘

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

再次请求http://192.168.11.132/test1/demo2.php.scd.cdr.saa,发现文件被正常解析为PHP文件
解析漏洞总结_第15张图片

你可能感兴趣的:(web安全,渗透测试,解析漏洞)