? 客户端检测方法: ? 客户端javascript检测(通常为检测扩展名) ? 客户端MIME类型检测(检测content-type内容) ? 客户端目录路径检测(检测跟文件extension相关内容有关系的内容) ? 服务端文件内容检测(检测内容是否含有合法或者恶意代码)
客户端javascript检测
首先判断js文件本地验证 通常可以根据特的验证警告弹框的速度来判断,如果电脑运行的比较快,可以视同bp抓包,点击提交按钮的时候burp没有抓到包,就已经弹框,说明就是本地js验证。 1.绕过方法使用burp抓包改名 2直接删除本地js验证的js 3,添加js脚本验证,使用php的格式添加进去
MIME的作用:使客户端软件区分不同种类的数据,列如web浏览器就是通过mime类型判断文件是何种图片
web服务器使用mime类型来说明发送的种类,web客户端使用mime类型说明希望接受到何种数据种类 Tmocat的安装目录\cong\web.xml中就定义了大量的mime类型
绕过方法: 直接使用burp抓包,得到post上传数据后,将conten-type:text/plain改成Content-type:image/gif 就可以成功绕过
服务端检测绕过(目录路径检测) 目录路径检测,一般就是检测路径是否合法,但稍微一点都没有防御,比如比较新的fckeditor.php 2.6.4任意文件上传漏洞 /fckeditor264/filemanager/connectors/php/connector.php?Command=FileUpload&Type=Image& CurrentFolder=fuck.php%00.gif HTTP/1.0
服务端检测绕过(文件扩展名检测)
黑名单检测 黑名单的安全相比较白名单低一些,攻击手法比白名单多一些 一般有一个专门的blacklist文件,里面会有危险脚本文件
- 1文件名大小写绕过
用想Asp,pHp之类的文件即可绕过黑名单
- 2名单列表绕过
用黑名单没有的文件名进行攻击,比如黑名单里没有asa car之类
- 3特殊文件名绕过
比如发送的http包里面包文件名改成test.asp.或者test.asp_(这里的下划线指的是空格)这种文件名在windows系统里是不被允许的,所以需要在burp之类的里面进行修改 然后绕过验证,会被windows系统自动去掉后面的点和空格,但是需要注意的是unix/liunx系统没有这个特性
- 4.0x00截断
限制条件 php<5.3.29 且GPC关闭 正确使用0x0截断 数据包中必须包含有上传文件后的目录情况才可以使用,比如数据包中存在path:upload/那么攻击者就可以通过修改path的值来构造payload:upload/aa.php%00 为什么修改path才可以,因为程序中检测的是文件的后缀名,如果后缀合法则拼接路径和文件名,那么攻击者修改了path以后的拼接结果为:uploads/aaa.php%00/2018051413370000.php,移动文件的时候会将文件保存为uploads/aaa.php,从而达到Getshell效果。
%00(urldecode) 上传的表单中有一个enctype的属性,并且需要enctype=“multipart/form-data” (不对表单中数据进行编码),path大多数都是存放在表单中的,因此需要在数据包中进行urldecode操作使%00变成字符串结束符号
- .htaccess 文件攻击 配合名单列表绕过,上传一个自定义的.htaccess,就可以轻松绕
过
白名单绕过
-
0x00 截断绕过 用像 test.asp%00.jpg 的方式进行截断,属于白名单文件,再利用服务端代码的检测逻辑 漏洞进行攻击,目前我只遇到过 asp 的程序有这种漏洞 -
解析调用/漏洞绕过 这类漏洞直接配合上传一个代码注入过的白名单文件即可,再利用解析调用/漏洞
|