一,利用文件解析漏洞
二,上传本地验证绕过
三,上传服务器端验证绕过
1 ,文件解析漏洞
解析漏洞主要说的是一些特殊文件被“IIS,Apache,Nginx”在某种情况下解释成脚本文件格式的漏洞。
像IIS,Apache,Nginx这些容器在特定版本下是存在解析漏洞的。像IIS5.X/6.0这些老版本都存在解析漏洞。
IIS6.0解析利用方法有两种
1,目录解析
/xx.asp/xx.jpg。在网站下建立文件夹的名字为.asp,.asa的文件夹,任何扩展名的文件都被IIS当做asp文件夹解析并执行,例如:创建目录111.asp,那么 /111.asp/1.jpg 将被当成asp文件来执行,假如黑客可以控制上传功能,那么上传后的图片改不改名都能拿到shell
2,畸形文件名解析
在IIS6.0下,分号后面的不被解析,也就是说你上传x.asp把名称改成x.asp;.jpg 方便上传,如果上传后你的图片名字没有改的话,服务器在读到分号后就不往下读了,就会以脚本的格式来运行。
Apache解析漏洞
Apache 是从右到左开始判断解析,如果为不可识别解析,就继续向左解析,
比如 haue.php.owf.rar “owf” ‘rar’ 这两种后缀是Apache不可识别解析,Apache会把haue.php.owf.rar 解析成php。
如何判断是不是合法的后缀就是这个漏洞的利用关键,测试时可以尝试上传一个haue.php.jpg.png…去测试是否是合法后缀。
任意不识别的后缀,将会逐级向上识别.(对付黑名单效果好)
IIS7.0/IIS7.5/Nginx<8.03 畸形解析漏洞
IIS7.0/7.5就是我们的08服务器了,如果08服务器的php存在这种解析漏洞的话,我们上传个图片如111.jpg加个斜杠111.jpg/x.php(这个x没有限制)服务器就会当成php脚本类型来运行。
2,上传本地验证绕过
常见的上传检测方式
(1) 客户端 JavaScript 检测(通常为检测文件扩展名)
(2) 服务器 MIME 类型检测 (检测 content-Type 内容)
(3) 服务器端目录路径检测(检测跟path 参数相关的内容)
(4) 服务器文件扩展名检测(检测跟文件 extension 相关的内容)
(5) 服务端文件内容检测 (检测内容是否合法或者含有恶意代码)
1,客户端检测绕过
首先判断js本地验证
通常可以根据它的验证警告弹框的速度可以判断,如果你运行比较快,那么我们可以用burpsuit抓包,再点击提交的时候burp没有抓到包,就已经弹窗,说明这个就是js本地验证。
绕过方法:
1,使用burp抓包改名
2,使用firebug直接删除掉本地的js验证
3,添加js验证的白名单如将php的格式添加进去。
2,服务器 MIME 类型检测绕过
绕过方法:
直接用burpsuite抓包,得到post上传数据后,将content-Type:text/plain改成content-Type:image/gif
就可以绕过
3,服务器端目录路径检测
修改文件上传路径方法:用burp抓包,在upload/后面加上比如a.asp相应响应包的路径会发生变化。
3, 服务端检测绕过
(文件扩展名检测)
a,黑名单检测
b,白名单检测
c,文件头检测
绕过黑名单
1,文件名大小写绕过
像Asp, pHp之类的文件名绕过黑名单检测
2,名单列表绕过
用黑名单里没有的名单进行攻击,比如黑名单里没有asa或cer之类
3,特殊文件名绕过
比如发送的http包里打文件名改成test…asp.或test.asp_(下划线为空格).这种命名方式在Windows系统里是不被允许的,所以需要在burpsuite之类里进行修改,然后绕过验证后,会被Windows系统自动去掉后面的点和空格,注意Linux系统没这个特性,
4, 0x00截断绕过
什么是00截断呢?方法: 通过打开burp的数据包找到上传到图片如filename=2.jpg 把它的文件名改成2.php%00.jpg 鼠标选中“%00”按住Ctrl+shift+u 即可将后面的截断 上传到服务器就是php文件了,利用00截断可以绕过一些白名单黑名单
5,调用解析漏洞
白名单绕过
1,0x00截断绕过
文件头检测绕过
当我们把脚本文件改为图片文件上传时遇到文件头检测时,是不允许上传的,因为一个图片的文件头跟一个脚本的文件头是不一样的,jpg的文件头对应16进制会显示JFIF
gif会显示GIF89a。
绕过方法,在文件头写下gif89a 意思是告诉检测系统我是个gif格式的图片
文件加载检测
这个就是最变态的检测了,它会对文件进行二次渲染。相对来说是比较安全的
其他绕过方法(双文件上传绕过)
剩余绕过方法后续会继续补充。