文件上传漏洞

文件上传流程

• A 客户端javascript 检测(通常为检测文件扩展名)
• B 服务端MIME 类型检测(检测Content-Type 内容)
• C 服务端目录路径检测(检测跟path 参数相关的内容)
• D 服务端文件扩展名检测(检测跟文件extension 相关的内容)
• E 服务端文件内容检测(检测内容是否合法或含有恶意代码)

常见文件上传绕过方法

javascript验证突破
修改木马名,扩展名改为.jpg , burp suite 将filename=“X.jpg”改为 filename=“X.Php”,forward上传

大小写突破
上传 .Php ,AsP,pHp之类成功绕过

服务器文件扩展名检测
拦截上传文件数据包并将上传文件名后面添加空格,成功绕过并上传文件。
使用双后缀配合apache解析漏洞 也可以突破文件上传执行代码,即X.PHP.aaa
 上传文件后缀黑名单:php、php3、php5、phtml、pht、Php、php+space、截断
 上传文件后缀白名单:结合解析漏洞、文件包含漏洞、.htaccess、.user.ini、截断

过滤文件名突破
尝试上传mm.pphphp,成功绕过上传,服务器会把php删掉一个。
特殊后缀名
常见的不常用但是能执行后缀有
ASP语言类:.asa .cer .cdx
PHP语言类: .php3 .php4 .php5
.net语言类:.ashx
MIME类型检测
截取上传数据包,修改Content-Type,然后forward 上传。Content-Type:image/gif
文件内容检测
1.一般文件内容的检测使用getimagesize()函数检测, 会判断文件是否是一个有效的图片文件,如果是,则允许上传,否则的话,不允许上传.
用burp suite进行代理,然后选择图片马进行上传
2.判断文件头是否合法。 可通过添加合法文件头进行绕过,如GIF89a等
3.判断是否包含<?
使用脚本标签绕过 <script language="php"> echo file_get_contents('flag.php'); </script>
分布式配置文件(文件重写)
.htaccess文件(或者"分布式配置文件")提供了针对 目录改变配置的方法, 即,在一个特定的文档目录中 放置一个包含一个或多个指令的文件, 以作用于此目 录及其所有子目录。用户可以利用此文件定义解析文 件的后缀,从而进行恶意利用.
分布式配置文件上传漏洞的实例
1. 建立.htaccess文件,内容如下: •
<FilesMatch “cimer”>
SetHandler application/x-httpd-php

并将其上传至服务器中
2. 上传php木马文件名包含cimer,此时木马没有后缀名也可以按php执行。
如: AddType application/x-httpd-php .jpg
AddHandler php5-script .php
其余配置问题导致漏洞
(1)如果在 Apache 的 conf 里有这样一行配置 AddHandler php5script .php
这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会 以 php 来执行。
(2)如果在 Apache 的 conf 里有这样一行配置 AddType application/xhttpd-php .jpg 即使扩展名是 jpg,一样能以php 方式执行。

0x00截断(目录路径检测)
burp suite代理截断,然后浏览上传。
修改one.php.gif为one.php0x00(十六进制)gif
• name=getname(http requers) //若此时获取的文件名为 test.asp .jpg(asp后面为0x00)
• type=gettype(name) //而在gettype()函数里处理方式是从后往前扫描 扩展名,所以判断为jpg
if(type==jpg) SaveFileToPath(UploadPath.name,name) //这里是以0x00作为文件名截断,最后 以test.asp存入路径里

解析漏洞
目录解析
形式:www.xxx.com/xx.asp/xx.jpg
原理: 服务器默认会把.asp,.asp目录下的文件都解析成asp文件。
文件解析
形式:www.xxx.com/xx.asp;.jpg
原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件 了。
apache解析漏洞
Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文 件解析,就再往左判断。比如test.php.qwe.asd “.qwe”和”.asd” 这两种 后缀是apache不可识别解析,apache就会把wooyun.php.qwe.asd解析成 php。
漏洞形式:www.xxxx.xxx.com/test.php.php123
nginx解析漏洞
漏洞原理 Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过 正则匹配设置SCRIPT_FILENAME。当访问www.xx.com/phpinfo.jpg/1.php这个 URL时,$fastcgi_script_name会被设置为“phpinfo.jpg/1.php”,然后构造成 SCRIPT_FILENAME传递给PHP CGI,但是PHP为什么会接受这样的参数,并将 phpinfo.jpg作为PHP文件解析呢?这就要说到fix_pathinfo这个选项了。 如果开启 了这个选项,那么就会触发在PHP中的如下逻辑:
PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会 将phpinfo.jpg作为PHP文件来解析了
漏洞形式
www.xxxx.com/UploadFiles/image/1.jpg/1.php www.xxxx.com/UploadFiles/image/1.jpg%00.php www.xxxx.com/UploadFiles/image/1.jpg/%20\0.php
另外一种手法:上传一个名字为test.jpg,然后访问test.jpg/.php,在这个目录下就 会生成一句话木马shell.php。
IIS7.5解析漏洞
IIS7.5的漏洞与nginx的类似,都是由于php配置文件中,开启了 cgi.fix_pathinfo,而这并不是nginx或者iis7.5本身的漏洞。

系统特型,如windows:php+space、php.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值