常见的解析漏洞总结

文件解析漏洞

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

比如网站管理员配置不当,导致php2、phtml、ascx等等这些文件也被当成脚本文件执行了。甚至某些情况下管理员错误的服务器配置导致.html、.xml等静态页面后缀的文件也被当成脚本文件执行。

但是,大部分的解析漏洞还是由于web服务器自身的漏洞,导致特殊文件被当成脚本文件执行了。

一、IIS解析漏洞

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

IIS5.x/6.0 中,在网站下建立文件夹的名字为*.asp、*.asa、*.cer、*.cdx 的文件夹,那么其目录内的任何扩展名的文件都会被IIS当做asp文件来解释并执行。例如创建目录 test.asp,那么 /test.asp/1.jpg 将被当做asp文件来执行。假设黑客可以控制上传文件夹路径,就可以不管上传后你的图片改不改名都能拿shell了

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

IIS5.x/6.0 中, 分号后面的不被解析,也就是说 xie.asp;.jpg 会被服务器看成是xie.asp。还有IIS6.0默认的可执行文件除了asp还包含这两种 .asa   .cer 。而有些网站对用户上传的文件进行校验,只是校验其后缀名。所以我们只要上传 *.asp;.jpg、*.asa;.jpg、*.cer;.jpg 后缀的文件,就可以通过服务器校验,并且服务器会把它当成asp文件执行。

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

微软发布了IIS7.0修补了IIS6.0的解析漏洞,没想到IIS7.0爆出更严重的畸形解析漏洞,于是微软急忙发布了IIS7.5

在 IIS7.0中,在默认Fast-CGI开启状况下,我们往图片里面写入下面的代码

将文件保存成test.jpg格式,上传到服务器,假设上传路径为/upload,上传成功后,直接访问/upload/test.jpg/x.php,此时神奇的畸形解析开始发挥作用啦。test.jpg将会被服务器当成php文件执行,所以图片里面的代码就会被执行。我们会神奇的发现在 /upload 目录下创建了一个一句话木马文件 shell.php 。

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

这个解析漏洞和下面讲的Nginx的解析漏洞是一样的。

4、其他解析漏洞

在windows环境下,xx.jpg[空格]  xx.jpg.  这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点,黑客可以通过抓包,在文件名后加一个空格或者点绕过黑名单。若上传成功,空格和点都会被windows自动消除。

二、Ngnix解析漏洞

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

漏洞原因:

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

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

在nginx<0.8.03环境中,我们新建一个文件,内容为:<?php phpinfo() ?> ,然后将其名字修改为:  test.jpg

在浏览器中访问 http://192.168.10.139/test.jpg  显示图片解析错误。在浏览器中访问 http://192.168.10.139/test.jpg/test.php ,显示:Access denied.  。这就奇怪了,test.jpg是文件不是目录,test.php更是根本就不存在的文件,访问/test.jpg/test.php没有报404,而是显示  Access denied.  。

原因在于,Nginx拿到文件路径(更专业的说法是URI)/test.jpg/test.php 后,一看后缀是.php,便认为该文件是php文件,于是转交给php去处理。php一看 /test.jpg/test.php 不存在,便删去最后的/test.php,又看/test.jpg存在,便把/test.jpg当成要执行的文件了,又因为后缀为.jpg,php认为这不是php文件,于是返回  Access denied. 。

这其中涉及到php的一个选项:cgi.fix_pathinfo,该值默认为1,表示开启。开启这一选项有什么用呢?看名字就知道是对文件路径进行处理。举个例子,当 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/ccc.zzz ,若   /aaa.xxx/bbb.yyy  仍不存在,则继续去掉  /bbb.yyy ,以此类推。

该选项在配置文件 php.ini 中。若是关闭该选项,访问 http://127.0.0.1/test.jpg/test.php 只会返回找不到文件。但关闭该选项很可能会导致一些其他错误,所以一般默认是开启的。

但是目前我们还没能成功执行代码,test.jpg 没有当成php文件执行,只是返回了 Access denied ,因为新版本的php引入了security.limit_extensions ,限制了可执行文件的后缀,默认只允许执行.php文件。

这一漏洞是由于Nginx中php配置不当而造成的,与Nginx版本无关,但在高版本的php中,由于security.limit_extensions 的引入,使得该漏洞难以被成功利用。

为何是Nginx中的php才会有这一问题呢?因为Nginx只要一看URL中路径名以.php结尾,便不管该文件是否存在,直接交给php处理。而如Apache等,会先看该文件是否存在,若存在则再决定该如何处理。cgi.fix_pathinfo是php具有的,若在php前便已正确判断了文件是否存在,cgi.fix_pathinfo便派不上用场了,这一问题自然也就不存在了。(IIS在这一点和Nginx是一样的,同样存在这一问题)

2、%00空字节代码解析漏洞

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

在以下版本的nginx中,我们在图片中嵌入PHP代码然后通过访问 xxx.jpg%00.php 来执行其中的代码

 Nginx 0.5.*

 Nginx 0.6.*

 Nginx 0.7 <= 0.7.65

 Nginx 0.8 <= 0.8.37

3、CVE-2013-4547(%20%00)

影响nginx版本:nginx 0.8.41 ~ 1.5.6

这一漏洞的原理是非法字符空格和截止符(%00)会导致Nginx解析URI时的有限状态机混乱,危害是允许攻击者通过一个非编码空格绕过后缀名限制。是什么意思呢?举个例子,假设服务器上存在文件:“file.jpg ”,注意文件名的最后一个字符是空格。则可以通过访问:

http://127.0.0.1/file.jpg \0.php 

让Nginx认为文件“file.jpg ”的后缀为“.php”。

来测试下,这次测试在Nginx/1.0.15中进行。首先准备一张图片,命名为“test.html ”,注意,文件名含有空格。然后在浏览器中访问该文件,会得到一个404,因为浏览器自动将空格编码为%20,服务器中不存在文件“test.html%20”。

测试目标是要让Nginx认为该文件是图片文件并正确地在浏览器中显示出来。我们想要的是未经编码的空格和截止符(\0),怎么办呢?使用Burp Suite抓取浏览器发出的请求包,修改为我们想要的样子,原本的URL是:http://192.168.56.101/test.htmlAAAjpg ,将第一个“A”改成“20”(空格符号的ASCII码),将第二个“A”改成“00”(截止符),将第三个“A”改成“2e”(“.”的ASCII码),如图

修改完毕后Forward该请求,在浏览器中看到:

我们已经成功地利用了漏洞!但这有什么用呢?我们想要的是代码被执行。

继续测试,准备文件“test.jpg ”,注意文件名的最后一个字符是空格,上传到服务器。文件内容为:

用Burp Suite抓包并修改,原本的URL是:http://192.168.56.101/test.jpg…php ,将jpg后的第一个“.”改为20,第二个“.”改为00,如下图所示:

修改完毕后 Forword 该请求,在浏览器中看到:Access  denied  ,好吧,又是这个。

这说明Nginx在接收到这一请求后,确实把文件“test.jpg ”当做php文件交给php去执行了,只是php看到该文件后缀为“.jpg ”而拒绝执行。这样,便验证了Nginx确实存在该漏洞。但是由于 security.limit_extensions 的存在,导致我们并不能利用此漏洞

三、Apache解析漏洞

1、文件名解析漏洞

apache是从右到左开始判断解析,如果为不可识别解析,就再往左判断。比如 xie.php.owf.rar     .owf和.rar 这两种后缀是apache不可识别的解析,apache就会把xie.php.owf.rar解析成 xie.php 。如何判断是不是合法的后缀就是这个漏洞的利用关键,测试时可以尝试上传一个 xie.php.rara.jpg.png..(把你知道的后缀都写上去)去测试是否是合法后缀。任意不识别的后缀,逐级向上识别。

2、罕见后缀

计算机世界自开天辟地以来,便自由多彩。还记得mime.types文件吗?在该文件中搜索“php”这三个字母,结果如下所示:

  1.   werner@Yasser:~$ cat /etc/mime.types | grep php
  2.   #application/x-httpd-php          phtml pht php
  3.   #application/x-httpd-php-source           phps
  4.   #application/x-httpd-php3         php3
  5.   #application/x-httpd-php3-preprocessed        php3p
  6.   #application/x-httpd-php4         php4
  7.   #application/x-httpd-php5         php5

还记得正则表达式”.+\.ph(p[345]?|t|tml)$”吗,该正则表达式匹配的不仅仅有php,还有php3、php4、php5、pht和phtml。

好吧,原来不仅php,就连phtml、pht、php3、php4和php5都是Apache和php认可的php程序的文件后缀。我原本只知道“.php”的,真是大开眼界。这就好比,不仅py是Python程序文件的后缀,还有pyc和pyo也都是。写上传过滤规则的程序员是否博学多识,也知道这些知识呢?我想,大抵是不知道的。利用这些“罕见”的后缀名,也可能绕过安全检查,干些“坏事”。

我在Ubuntu14.04+Apache2.4.7中进行测试,先准备文件text.php,其内容是经典的Hello World:

  <?php echo 'HELLO WORLD'; ?>

然后在浏览器中打开它,成功显示“HELLO WORLD”。再修改该文件后缀为各种后缀,进行测试。测试结果是,以php、phtml、pht、php3、php4和php5为后缀,能成功看到“HELLO WORLD”;以phps为后缀,会报403错误,Forbidden;以php3p为后缀,会在浏览器中看到源码。

3、.htaccess文件

.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过 .htaccess文件,可以实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能IIS平台上不存在该文件,该文件默认开启,启用和关闭在 httpd.conf 文件中配置。

 .htaccess 文件生效前提条件为:

mod_rewrite 模块开启

AllowOverride All

#1:这个.htaccess的意思就是把所有名字里面含有shell的文件当成php脚本来执行

<FilesMatch   "shell"> 

SetHandler  application/x-httpd-php 

</FilesMatch>

#2:这里代码的意思可以让 .jpg后缀名文件格式的文件名以php格式解析

AddType application/x-httpd-php .jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/802312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

回归测试覆盖率指的是什么?

定义 回归测试是指修改了旧代码后&#xff0c;重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。 在软件开发过程当中&#xff0c;一旦软件代码做了修改&#xff0c;就有可能引入新的问题&#xff0c;所以这个时候就需要把已经完成了的验证用例重新跑一下&…

vue3+Ts+Ant Design Vue +天地图组件封装

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vue3TsAntDesign-Vue组件天地图组件的封装 示例图 首先,在index.html引入天地图资源,vue3选择v4版本 <script src"http://api.tianditu.gov.cn/api?…

【Redis】NoSQL之Redis的配置和优化

关系型数据库与非关系型数据库 关系型数据库 关系型数据库是一个结构化的数据库&#xff0c;创建在关系型模型&#xff08;二维表&#xff09;的基础上&#xff1b;一般面向于记录&#xff1b; SQL语句(标准数据查询语句)就是一种基于关系型数据库的语言&#xff0c;用于执行…

安装 windows 版 dash —— zeal

1、下载安装 下载地址&#xff1a;Download Zeal 选择 Protable 版 直接使用 zeal 下载文档比较慢甚至失败&#xff0c;可以设置代理&#xff0c;也可以使用下面两种方式。 2、手动下载 docset 文档后导入 这种方法不能够选择文档的版本 &#xff08;1&#xff09;在 http://…

达梦数据库的V$DM_INI和V$PARAMETER系统视图

V$DM_INI和V$PARAMETER是达梦数据库中两个常用的系统视图&#xff0c;用于查看数据库的配置参数。这两个视图的主要区别在于它们展示参数的来源和用途。 V$DM_INI V$DM_INI视图主要用于展示数据库启动时加载的初始化参数信息。这些信息通常来自于数据库的初始化参数文件&…

自动驾驶中的传感器融合算法:卡尔曼滤波器和扩展卡尔曼滤波器

自动驾驶中的传感器融合算法&#xff1a;卡尔曼滤波器和扩展卡尔曼滤波器 附赠自动驾驶学习资料和量产经验&#xff1a;链接 介绍&#xff1a; 追踪静止和移动的目标是自动驾驶技术领域最为需要的核心技术之一。来源于多种传感器的信号&#xff0c;包括摄像头&#xff0c;雷达…

VSCode输入花括号{}}会多一个解决方案

打开设置 搜索Closing Brackets 选择BeforeWhitespace 选完后重启下VSCode即可

ddres( ) 组站星双差方程和设计矩阵

1 ddres( )参数介绍 rtklib中进行的单频解算 双差观测值&#xff0c;单差的模糊度 单频点双差 DD (double-differenced) phase/code residuals ------------------------------ x 模糊度 P 方差-协方差阵 sat 共识卫星列表 ns 共识卫星数量 y…

模型优化和调整(2)

接模型优化和调整&#xff08;1&#xff09; 调整反向传播 梯度消失和梯度爆炸 梯度消失和梯度爆炸都和计算出来的“delta”有关。理想的delta应该是逐渐减小的。如果delta一直太小&#xff0c;则会导致下降太慢&#xff0c;甚至对于权重没有改变&#xff0c;此时形成了梯度…

深入C语言内存:数据在内存中的存储

一、数据类型 1. unsigned&#xff1a;无符号数类型 当一个数是无符号类型时&#xff0c;那么其最高位的1或0&#xff0c;和其它位一样&#xff0c;用来表示该数的大小。 2.signed&#xff1a;有符号数类型 当一个数是有符号类型时&#xff0c;最高数称为“符号位”。符号位为1…

绝地求生:第29赛季第1轮更新公告

正式服维护日期 ※ 下列时间可能会视维护情况而变化。 北京时间4月9日上午8:00 – 下午4:30 地图轮换 ※ 地图轮换将于北京时间每周三上午10点进行。 日期 正式服 – 普通比赛 可自主选择地图的地区 - 亚洲、东南亚 可自主选择地图的地区 – 韩国/日本、KAKAO 随机选择地…

【随笔】Git 基础篇 -- 分支与合并 git merge(九)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

重生奇迹MU玛雅宝石功能

玛雅宝石是重生奇迹mu游戏中的重要合成材料&#xff0c;玩家可以使用玛雅宝石合成属性果实、副本门票等道具。不过玛雅宝石的获取不易&#xff0c;所以使用起来一个都不能浪费。今天就给大家分享一些玛雅宝石使用效益最大化的经验。 获取与使用 在游戏中&#xff0c;玛雅宝石…

有人吐槽:低代码平台自带可视化报表,你定制化设计有啥市场?

类似这种评论&#xff0c;我见过的太多了。photoshop触手可及&#xff0c;设计高手又有几人呢&#xff1f; 工具毕竟就是工具&#xff0c;能不能用好&#xff0c;完全在于个体。 实不相瞒&#xff0c;我们接过N多可视化报表的美化业务&#xff0c;这就好比天猫有默认的店铺模…

JAVA面试八股文之Redis相关

Redis相关 Redis6.0为什么要用多线程&#xff1f;在Redis中存一个list集合怎么实现排序&#xff1f;Redis的5大基本类型的底层原理&#xff1f;缓存穿透&#xff1f;缓存击穿&#xff1f;缓存雪崩&#xff1f;redis做为缓存怎么保持和mysql数据进行同步&#xff1f;&#xff08…

Spring声明式事务(Spring学习笔记十三)

不推荐使用编程式事务 在Spring-dao.xml中配置声明式事务 <!--配置声明式事务 --><!--获得transactionManager然后把他丢给他的构造器 constructor-arg --><bean id"transactionManager" class"org.springframework.jdbc.datasource.Data…

ENSP 防火墙配置IPSecVPN点到多点

建议关闭物理机系统防火墙 应用场景 总部与分支机构通信&#xff1a;企业总部可以与遍布不同地理位置的分支机构建立安全的通信通道。远程用户访问&#xff1a;远程用户可以通过IPSec VPN隧道安全地访问公司内部网络资源&#xff0c;就像他们直接连接到公司网络一样。数据共享和…

【MySQL学习】MySQL的慢查询日志和错误日志

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

鸿蒙OS开发实战:【自动化测试框架】使用指南

概述 为支撑HarmonyOS操作系统的自动化测试活动开展&#xff0c;我们提供了支持JS/TS语言的单元及UI测试框架&#xff0c;支持开发者针对应用接口进行单元测试&#xff0c;并且可基于UI操作进行UI自动化脚本的编写。 本指南重点介绍自动化测试框架的主要功能&#xff0c;同时…

【Spring Security】2.实现最简单的身份验证

文章目录 一、找到官网的身份认证&#xff08;authentication&#xff09;示例代码二、实现最简单的身份验证1、创建Spring Boot项目2、创建IndexController3、创建index.html4、启动项目测试Controller 三、{/logout}的作用四、页面样式无法加载的问题 一、找到官网的身份认证…