文件解析漏洞文件解析漏洞的原理

2021-01-28 10:58发布

6条回答
一条哈士奇
2楼 · 2021-01-28 11:28

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

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

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

芒果
3楼 · 2021-01-28 11:53

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

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

浅浅77
4楼 · 2021-01-28 13:52

1.目录解析

/xx.asp/xx.jpg

漏洞原理:在网站下建立名字为 xx.asp的文件夹,其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。(php的也是一样)

漏洞利用:

 例如创建目录 images.php,那么如果把这个写有一句话木马的1.jpg文件上传进images.php这个目录下面,那么http://127.0.0.1/images.php/1.jpg 这个就是一个后门地址,可以直接用菜刀去连接

2.文件解析

xx.asp;.jpg (分号截断)

漏洞原理:在IIS6.0下的服务器默认不解析“;”后面的内容,也就是说xx.asp;.jpg会被服务器看成是xx.asp,解析成了asp文件

漏洞利用:上传一个写有一句话的1.asp;.jpg木马文件就可以直接用菜刀连接了(或者直接上传一个大马也可以直接访问了)

IIS6.0 默认的可执行文件除了asp还包含这三种

/xx.asa

/xx.cer

/xx.cdx

二、IIS 7.x/ Nginx <8>

Nginx漏洞原理:
Nginx默认是以CGI的方式支持PHP解析的(即默认Fast-CGI为开启状态),普遍的做法是:上传一个名字为1.jpg,内容为:

');?>

的文件(其实就是利用了fputs这个函数),然后访问1.jpg/.php,在这个目录下就会生成一句话木马 shell.php

·IIS7.5解析漏洞

IIS7.5的漏洞与nginx的类似,都是由于php配置文件中,开启了cgi.fix_pathinfo,而这并不是nginx或者iis7.5本身的漏洞。

 三、Nginx <8>

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

影响版本:0.5.,0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37

四、利用apache解析漏洞绕过服务器端扩展名检测:

漏洞原理:Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断. 这种漏洞存在于使用module模式与php结合的所有版本的Apache。

利用方法:将木马命名为 【1.php.adc】,在连接菜刀时,应该是http://.../1.php

五,IIS7.0,7.5和Nginx<8>

原理:在上传文件所在目录下创建一个一句话木马文件

实现过程:新建一个1.txt文件,内容为:

')?>

将文件保存成1.jpg格式,上传到服务器,假设上传路径为/upload,

上传成功后,直接访问/upload/1.jpg,然后我们会发现/upload目录下创建了一个一句话木马文件shell.php

六,空字节代码绕过漏洞,也叫神奇的00截断,此处的00指的是16进制的00

文件名00截断:直接上实现过程,,,

1)第一种方法:上传文件名为1.php.jpg格式的图马文件,抓包后,在php后面加上一个空格字符,然后到hex中将php后面的空格字符对应的20改为00后放行即可。

2)第二种方法:上传文件名为1.php.jpg格式的图马文件,抓包后,将进行url解码后放行即可。

请求包中包含上传目录的,可以尝试对上传目录进行00截断,原理都一样,话不多说,直接上实现过程,,,,

实现过程:上传路径/upload/,直接改成/upload/,再将进行url解码后放行即可

七,一句话绕过:

(1).00截断——计算机遇到’\0’字符,会认为该字符结束

方法:在抓到的包中,转到hex,找到文件名.php.jpg对应的地方将2e改为00(2e是字符‘.’对应的hex值)

或者直接在.php后面加上然后选中,对其url-decode处理

(2)针对文件内容检测,最常用的就是图片马了,(它检测内容的时候,是根据文件开头是否有GIF89A这些,以此来判断是否是图片)

我想吃肉
5楼 · 2021-01-28 14:06

文件解析漏洞

解析漏洞主要是一些特殊文件被iis、Apache、Nginx等服务在某种情况下解释成脚本文件格式并得以执行而产生的漏洞。

iis 5.x/6.0解析漏洞

iis6.0解析漏洞主要有以下三种:
   1. 目录解析漏洞 /xx.asp/xx.jpg
  在网站下创建文件夹名字为.asp、.asa的文件夹,其目录内的任何扩展名的文件都被iis当做asp文件来解析并执行。因此只要攻击者可以通过该漏洞直接上传图片马,并且可以不需要改后缀名!
  2. 文件解析 xx.asp;.jpg
  在iis6.0下,分号后面的不被解析,所以xx.asp;.jpg被解析为asp脚本得以执行。
  3. 文件类型解析 asa/cer/cdx
  iis6.0 默认的可执行文件除了asp还包含这三种asa、cer、cdx。

Apache解析漏洞

Apache对文件的解析主要是从右到左开始判断并进行解析,如果判断为不能解析的类型,则继续向左进行解析,如xx.php.wer.xxxxx将被解析为PHP类型。

IIS 7.0/ Nginx <8>

在默认Fast-CGI开启状况下上传名字为xx.jpg,内容为:
');?>
  然后访问xx.jpg/.php,在这个目录下就会生成一句话木马shell.php。

Nginx<8>

nginx如下版本:0.5., 0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37在使用PHP-FastCGI执行php的时候,URL里面在遇到空字节时与FastCGI处理不一致,导致可以在图片中嵌入PHP代码然后通过访问xxx.jpg.php来执行其中的代码。
  另一种Nginx文件漏洞是从左到右进行解析,既可绕过对后缀名的限制,又可上传木马文件,因此可以上传XXX.jpg.php(可能是运气,也可能是代码本身问题,但在其他都不能成功的条件下可以试试)。如下:
Content-Disposition: form-data; name="userfiles"; filename="XXX.jpg.php"

htaccess文件解析

如果Apache中.htaccess可被执行并可被上传,那么可以尝试在.htaccess中写入:
SetHandler application/x-httpd-php
  然后再上传shell.jpg的木马,这样shell.jpg就可被解析为PHP文件了。



桥豆麻袋
6楼 · 2021-01-28 16:24


解析漏洞正如其名,一般大家常说的是,文件在某种格式下,会被执行为该脚本语言的文件。

文件上传漏洞通常与Web容器的解析漏洞配合利用

常见Web容器有IIS、Nginx、Apache、Tomcat等


IIS 6.0解析漏洞

目录解析:/xx.asp/xx.jpg  xx.jpg可替换为任意文本文件(e.g. xx.txt),文本内容为后门代码

IIS6.0 会将 xx.jpg 解析为 asp 文件。

后缀解析:/xx.asp;.jpg     /xx.asp:.jpg(此处需抓包修改文件名)

IIS6.0 都会把此类后缀文件成功解析为 asp 文件。

{/xx.asp:.jpg 此类文件在Windows下不允许存在,:.jpg被自动除去,剩下/xx.asp}

默认解析:/xx.asa    /xx.cer   /xx.cdx

IIS6.0 默认的可执行文件除了 asp 还包含这三种

IIS 7.0/IIS 7.5/Nginx <=0.8.37  解析漏洞

IIS 7.0/IIS 7.5/Nginx <=0.8.37

在默认Fast-CGI开启状况下,在一个文件路径(/xx.jpg)后面加上/xx.PHP会将 /xx.jpg/xx.php 解析为 php 文件。

常用利用方法: 将一张图和一个写入后门代码的文本文件合并 将恶意文本写入图片的二进制代码之后,避免破坏图片文件头和尾

e.g.  copy xx.jpg/b + yy.txt/a xy.jpg

######################################

/b 即二进制[binary]模式

/a 即ascii模式 xx.jpg正常图片文件

yy.txt 内容 ');?>

意思为写入一个内容为 名称为shell.php的文件

######################################

找个地方上传 xy.jpg ,然后找到 xy.jpg 的地址,在地址后加上 /xx.php 即可执行恶意文本。

然后就在图片目录下生成一句话木马 shell.php 密码 cmd

Nginx <=0.8.37  解析漏洞

在Fast-CGI关闭的情况下,Nginx <=0.8.37 依然存在解析漏洞

在一个文件路径(/xx.jpg)后面加上.php会将 /xx.jpg.php 解析为 php 文件。

Apache  解析漏洞

后缀解析:test.php.x1.x2.x3

Apache将从右至左开始判断后缀,若x3非可识别后缀,再判断x2,直到找到可识别后缀为止,然后将该可识别后缀进解析

test.php.x1.x2.x3 则会被解析为php

经验之谈:php|php3|phtml 多可被Apache解析

--------------------------------------------------------------------------------------------------------------

Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断.

比如 cracer.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把cracer.php.owf.rar解析成php.

如何判断是不是合法的后缀就是这个漏洞的利用关键,测试时可以尝试上传一个cracer.php.rara.jpg.png…(把你知道的常见后缀都写上…)去测试是否是合法后缀。

其他一些可利用的   解析漏洞

在windows环境下,xx.jpg[空格] 或xx.jpg. 这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点,这也是可以被利用的!

在向一台windows主机上传数据时,你可以抓包修改文件名,在后面加个空格或点,试图绕过黑名单,若上传成功,最后的点或空格都会被消除,这样就可得到shell。

我记得Fck Php 2.6就存在加空格绕过的漏洞。{Linux主机中不行,Linux允许这类文件存在}

如果在Apache中.htaccess可被应用(Apache的配置文件httpd.conf中对目录的AllowOverride设置为All时,apache会应用目录下.htaccess中的配置 By sfasfas),

且可以被上传,那可以尝试在.htaccess中写入:

SetHandler application/x-httpd-php

shell.jpg换成你上传的文件,这样shell.jpg就可解析为php文件

lighttpd   解析漏洞

xx.jpg/xx.php

WebDav漏洞

WebDav是一种基于HTTP1.1协议的通信协议,它扩展了HTTP协议。在开启WebDav后若
支持PUT、Move、Copy、Delete等方法,就会存在安全隐患。
测试步骤如下:
1)通过OPTIONS探测服务器所支持的HTTP方法
   请求:
OPTIONS / HTTP/1.1
   Host: xxxx.com
2)通过PUT方法向服务器上传shell
   请求:
   PUT /a.txt HTTP/1.1
   Host: xxxx.com
   Content-Length: 30
   <%eval request("chopper") %>
3)通过Move或Copy方法改名
   请求:
COPY /a.txt HTTP/1.1
   Host: xxxx.com
   Destination: xxxx.com/cmd.asp
4)用DELETE方法删除文件
   请求:
DELETE /a.txt HTTP/1.1
   Host: xxxx.com


PHP CGI解析漏洞

当php的配置文件中的选项cgi.fix_pathinfo = 1开启时,当访问xxx.com/x.txt/x.php
时,若x.php不存在,则PHP会递归向前解析,将x.txt当作php脚本来解析
IIS中:任意文件名/任意文件名.php就会被解析为php
Nginx中:任意文件名/任意文件名.php就会被解析为php


大冬瓜
7楼 · 2021-01-28 18:15

文件包含这个漏洞,用我自己的话来说就是程序员在网站设计中,为方便自己在设计构架时,使用了一些包含的函数,就像'文件包含'这几个字的字面意思一样,在文件中,包含一个文件。

我在总结这篇文章的时候看了,其他人总结的,感觉别人总结的很是详细,就像一开始我只认为包含只有PHP代码中才存在,后来我再整理复习的时候,才发现,包含这个漏洞在各大语言中,都存在的,只不过现在大部分网站都是PHP网站,所以存在这个漏洞的几率大一点,好了不废话了,我开始整理了。

文件包含

程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。


程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,
但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。


几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP Web Application中居多,
而在JSP、ASP、http://ASP.NET程序中却非常少,甚至没有,这是有些语言设计的弊端。


在PHP中经常出现包含漏洞,但这并不意味这其他语言不存在。


相关问题推荐

  • 回答 6

    这个还是因人而异吧,看你自己对哪方面感兴趣,兴趣是最好的老师,感兴趣了才愿意钻研学习下去,简单说一下这两个学习知识方面的不同吧:软件测试岗位虽然对于从业者的知识基础要求不高,但是软件测试岗位所涉及到的知识面还是比较广的,所以软件测试人员也需...

  • 回答 5

    SQL注入漏洞的危害:1、数据库中存储的用户隐私信息泄漏;2、通过操作数据库对某些网页进行篡改;3、修改数据库一些字段的值,嵌入网马链接,进行挂马攻击;4、数据库服务器被恶意操作,系统管理员帐户被窜改;5、数据库服务器提供的操作系统支持,让黑客得以...

  • 回答 16

    一、CISP(Certified Information Security Professional)证书中文叫注册信息安全专业人员,由中国信息安全产品测评认证中心实施的国家认证。可以说,这是目前国内对于个人来说认可度最高的信息安全人员资质,堪称最权威、最专业、最系统。根据实际岗位的不...

  • 回答 14

    渗透测试(也称为pentest)是测试移动应用程序漏洞的过程。此测试的主要目的是确保外部人员的重要数据.通过模拟黑客的思维和攻击手段,对计算机业务系统的弱点、技术缺陷和漏洞进行探查评估。经过客户授权后,在不影响业务系统正常运行的条件下,渗透人员在黑...

  • 回答 1

    网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。主要涉及到的有:1、物理措施:例如,保护网络关键设备(如交换机、大型计算机等),制定严格的网络...

  • 回答 33

      网络安全工程师学习内容:  1、计算机应用、计算机网络、通信、信息安全等相关专业本科学历,三年以上网络安全领域工作经验;  2、精通网络安全技术:包括端口、服务漏洞扫描、程序漏洞分析检测、权限管理、入侵和攻击分析追踪、网站渗透、病毒木马防...

  • 回答 26

      学历不是问题,技术才是硬道理!只要你的技术过硬的话,你完全可以进国家安全部门去工作的。比如公安局里的网监工作,大都是九零后的电脑方面的精英。未必都是本科生。还有从社会上特招进去的。所以说,现在是拿技术说话,不是靠学历吃饭的时代了。  网...

  • 回答 16

    网络安全的知识是比较简单的,比较好入门,好多知识理论,大家都是可以听懂的,这是完全没有问题的。网络安全最终的则是实战的应用,怎么把这些理论知识运用到事件中,这些才是重中之重。所以在选择培训机构的时候,也需要尽量去找这些实践操作多的培训机构。...

  • 回答 22

      能够胜任的岗位主要有:渗透测试工程师、大数据安全工程师、信息安全工程师、安全测试工程师、安全服务工程师、安全运维工程师、系统安全工程师、服务器安全工程师、云计算安全工程师、网络安全工程师、安全分析师、渗透讲师等;  按照web渗透、内网渗透...

  • 回答 23

    一些典型的网络安全问题,可以来梳理一下:IP安全:主要的攻击方式有被动攻击的网络窃听,主动攻击的IP欺骗(copy报文伪造、篡改)和路由攻击(中间人攻击);2. DNS安全:这个大家应该比较熟悉,修改DNS的映射表,误导用户的访问流量;3. DoS攻击:单一攻击...

  • 回答 19

    运维一般是设备或者环境的搭建和维护,网络安全可以看做是防火墙

  • 回答 12

    先说说运维工程师和网络工程师的区别。运维工程师是泛指,网络工程师为特指,所以不能这么对比。你应该这么理解,网络工程师是一个人(也可以是理解成一个岗位),而运维则是他的工作内容。从工作内容上来说,运维可细分为桌面运维、网络运维、服务器运维三大...

没有解决我的问题,去提问