文件解析漏洞

2021/10/27 23:14:00

本文主要是介绍文件解析漏洞,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文件解析漏洞原理

        文件解析漏洞主要是由于网站管理者操作不当或者web服务器自身的漏洞,导致一些特殊文件被IIS,apache,nginx或者其他web服务器在某种情况下解析成脚本文件去执行。

 文件解析漏洞分类

        IIS解析漏洞

        目录解析漏洞(test.asp/1.jpg)

        在IIS5.x/6.0中,网站下创建的名为*.asp,*.asa,*.cer,*.cdx的文件夹,而这些文件夹中的任何拓展名的文件都会被IIS当作asp文件来解析并执行。

        文件名解析漏洞(test.asp;jpg)

        在IIS5.x/6.0中,分号后面的不被解析,也就是test.asp;.jpg会被服务器当作test.asp。IIS6.0默认的可执行文件除了asp还有test.asa和test.cer两种后缀的文件。同样可以使用test.asa;.jpg和test.cer;.jpg进行上传解析。

        畸形解析漏洞(test.jpg/*.php)

        IIS7.0中,在默认Fast-CGI开启的情况下,我们向图片中写入如下的代码

<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[a])?>')?>

        将文件保存为test.jpg,上传到服务器,假设上传路径为/upload,上传成功后,直接访问/upload/test.jpg/a.php,test.jpg将会被服务器当成php文件执行,所以图片中的代码就会执行创建shell.php并写入<?php @eval($_POST[a]);?>

        临时解决办法:设置cgi.fix_pathinfo为0

        

        Nginx解析漏洞

        畸形解析漏洞(test.jpg/*.php)

        漏洞原因:

                php的配置文件php.ini文件中开启了cgi.fix_pathinfo

                /etc/php5/fpm/pool.d/www.conf中不正确的配置security.limit_extensions,导致允许将其他格式的文件当作php解析执行

        新建一个文件,内容为:<?php phpinfo();?>,然后将其命名为test.jpg,在浏览器中访问http://127.0.0.1/test.jpg显示图片解析错误;访问http:.//127.0.0.1/test.jpg/test.php,显示:Access denid.。test.jpg时文件不是文件夹,test.php也根本就是不存在的文件,访问http://127.0.0.1/test.jpg/test.php没有报404,而是显示Access denid,原因在于,Nginx在拿到/test.jpg/test.php后,一看后缀是.php,于是认为该文件是php文件,交给php引擎去处理。For example:当php引擎遇到文件路径为/aaa.xxx/bbb.yyy/ccc.zzz时,若/aaa.xxx/bbb.yyy/ccc.zzz不存在,则会去掉最后的/ccc.zzz,然后判断/aaa.xxx/bbb.yyy是否存在,以此类推,直到找出存在的文件如(/aaa.xxx/bbb.yyy),将/aaa.xxx/bbb.yyy当作文件/aaa.xxx/bbb.yyy/ccc.zzz。目前我们还是没有成功执行代码,test.jpg并没有怕被当做php文件执行,是因为新版本php引入了security.limit_extensions,限制可执行文件的后缀名,默认情况只允许执行.php格式的文件

        Nginx和IIS解析php文件时,不管文件存在与否,就直接交给php引擎处理,而apache服务器解析之前会判断文件是否存在。

        

        %00空字节代码解析漏洞

        Nginx遇到%00空字节时与后端FastCGI处理不一致,导致可以在图片中插入php代码,通过访问test.jpg%00.php来执行其中的代码

        Nginx0.5.*,Nginx0.6.*,Nginx0.7<=0.7.65,Nginx0.8<=0.8.37

        CVE-2013-4547(%20%00)

        影响Nginx版本:0.8.41~1.5.6

        漏洞原理:

                非法空字符和截止符(%00)会使得Nginx解析url时的有机制发生混乱,允许攻击者通过一个非编码空格绕过后缀名限制,假如服务器上有个文件:"test.jpg ",jpg后缀后面有空格,则可以通过http://127.0.0.1/test.jpg \0.php,让Nginx认为文件"test.jpg "的后缀为.php

        Apache解析漏洞

        文件名解析漏洞

                apache解析文件的顺序是从右到左,如果不能解析,就往左继续判断。

        .htaccess文件

                .htaccess文件时apache中的一个配置文件,负责相关目录下的网页配置,通过.htaccess文件,可以实现:

                网页301重定向,自定义404错误页面,改变文件拓展名,允许或阻止特定用户/目录访问,禁止目录列表,配置默认文档等。该文件默认开启,启用和关闭在httpd.conf中进行配置。

        .htaccess文件生效前提:

                mod_rewrite模块开启

                AllowOverride All

#把所有名字包含test的文件当作php脚本执行
<FileMatch "test">
    SetHandler application/x-httpd-php
</FileMatch>


#让.jpg格式文件以php格式解析
AddType application/x-httpd-php .jpg



这篇关于文件解析漏洞的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程