文件上传漏洞绕过方式总结
0x00 文件上传漏洞
在网站一些可以上传文件的地方,利用上传漏洞上传木马可以直接得到WEBSHELL,危害等级极高。上一篇文件上传漏洞的博客介绍了文件上传漏洞的原理和实战,这里来记录一些常见的绕过方法。
0x01 绕过前端验证
我们都知道,任何基于前端的验证都是不安全的,因为用户能直接修改它进行绕过。
如果在前端对上传文件的格式进行了限制,我们可以通过以下的办法进行绕过:
禁用js
我们通过firefox中的一个插件NoScript,将脚本禁用,这个时候上传文件的时候就不会触发js校验。修改可上传的文件类型
因为是基于前端的验证,所有代码我们都可以通过firebug来修改,只需要在允许的类型中加入我们的文件类型,或者在禁止的类型中删除我们的文件类型,提交即可饶过。通过BurpSuite绕过
我们通过BurpSuite进行绕过时,首先将文件名后缀改成它允许的类型,然后通过了前端的检查之后截取这个包,将文件后缀再改回来,就成功的绕过了js检查。
0x02 后端检测-MIME
此类后端检查时,检查的是Content-Type,也叫Mime-Type,这个时候,我们上传一个PHP文件,通过BurpSuite抓包,将.php后缀的Content-Type: application/octet-stream更改为.jpg的Content-Type: image/jpeg。
然后发包,就可以绕过后端基于Content-Type的检测。
0x03 后端检测-文件头
这个时候他会检测文件的16进制数据头是否是合法文件的数据头,这个时候我们找一个普通的图片文件,再写一个一句话木马文件:
1 |
|
然后通过前面隐写术的方法,进入两个文件的路径,在cmd中输入:
1 |
|
制作成图片马,即可通过菜刀连接一句话木马。
0x04 后端检测-黑名单
对于黑名单的检测方式,我们有如下几种办法绕过:
- 后缀名大小写混用
假如.php后缀,我们可以写成.PHp之类的形式,用于一些过滤不严谨的系统。 - 双写后缀
在一些系统中,仅仅匹配非法后缀删除,这个时候我们构造.pphphp,当它将第一个php匹配删除之后,剩下的字符又重新组合成了.php。 - 同义后缀名
很多文件的后缀名不止一个,一些不常用的后缀名如果没有加入黑名单,就可以通过其他的同义后缀绕过。
如下是几种常见的扩展名绕过:
Asp: asa cer cdx
Aspx: ashx asmx ascx
Php: php3 phtml
Jsp: jspx jspf
0x05 后端检测-iis解析漏洞
在iis6中,如果提交图片格式为1.asp;.jpg,后缀是asp可以绕过检测,然后在上传后就会被解析成asp格式的文件,这个时候通过上面的办法制作图片马,然后上传后通过菜刀连接上传后的图片马即可。
0x06 目录禁止执行
在一些存放上传文件的目录,禁止执行脚本,这个时候我们可以通过在这个目录创建新的子目录,然后将脚本写入子目录中,即可执行。
0x07 总结
文件上传漏洞带来的危害十分巨大,在有文件上传的位置,一定要做严格的检查,不能因为开发一时的方便而忽视危害,建议在开发时遵循如下几点:
- 1.应用白名单的方式过滤文件扩展名
- 2.使用三等于(===)来对比扩展名(防止类型转换带来的逻辑漏洞,之后写逻辑漏洞的时候会写到)
- 3.如果不是图片等必要呈现出来的文件,对上传路径设置权限。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!