1.js绕过
当用户在客户端选择文件点击上传的时候,客户端还没有向服务器发送任何消息,就对本地文件进行检测来判断是否是可以上传的类型,这种方式称为前台脚本检测扩展名。
JS=JavaScript在数据被提交到服务器之前验证数据。因为js验证用于客户端本地的验证,所以你如果上传一个不正确的文件格式,它的判断会很快就会显示出来你上传的文件类型不正确,那我们就能判断出该网站是使用的js验证
绕过方法:
上传文件抓包修改后缀名就可
2.Content-Type检测文件类型—绕过 (服务端检测绕过(MIME类型检测))
绕过方法:
1.上传一个正确的文件。抓取数据包,查看Content-Type
2.上传自己的文件,抓取数据包。修改Content-Type:image/jpeg
3.文件后缀名大小写混淆上传php文件
绕过方法:
1.抓取数据包修改上传文件后缀名的大小写字母即可。
2.多种混合:
源码:
绕过方法:
1.根据源码修改后缀名为xx.php5
2.修改Content-Type为:image/jpeg
3修改Content-Type: multipart/form-data 为Content-Type: Multipart/form-data即可
4.%00截断
绕过方法:
1.修改上传文件后缀名为可以上传的jsp
2.修改Content-Type为:image/jpeg
3.修改路径 upload为 upload/1.php 空格 然后使用hex把空格修改成00 直接截断
5.服务端检测绕过(文件扩展名检测)
(1)黑名单检测
1. 文件名大小写绕过
用像 AsP,pHp 之类的文件名绕过黑名单检测
2. 名单列表绕过
用黑名单里没有的名单进行攻击,比如黑名单里没有 asa 或 cer 之类
3. 特殊文件名绕过
比如发送的 http 包里把文件名改成 test.asp. 或 test.asp_(下划线为空格),这种命名方式 在 windows 系统里是不被允许的,所以需要在 burp 之类里进行修改,然后绕过验证后,会 被 windows 系统自动去掉后面的 点和空格,但要注意 Unix/Linux 系统没有这个特性。
4.0x00 截断绕过
在扩展名检测这一块目前我只遇到过 asp 的程序有这种漏洞,给个简单的伪代码 name= getname(httprequest)//假如这时候获取到的文件名是 test.asp.jpg(asp 后面为 0x00) type=gettype(name) //而在 gettype()函 数里处理方式是从后往前扫描扩展名,所以判断为 jpg if(type == jpg) SaveFileToPath(UploadPath.name,name)//但在这里却是以 0x00 作为文件名截断 //最后以 test.asp 存入路径里
5..htaccess 文件攻击
配合名单列表绕过,上传一个自定义的.htaccess,就可以轻松绕过各种检测
.htaccess文件创建:
创建一个123.htaccess文件,内容为:
<FilesMatch "pangya.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
然后在创建一个pangya.jpg的一句话 图片+一句话都可以
6. 解析调用/漏洞绕过 这类漏洞直接配合上传一个代码注入过的非黑名单文件即可,再利用解析调用/漏洞
(2)白名单检测
1.0x00 截断绕过
用像 test.asp%00.jpg 的方式进行截断,属于白名单文件,再利用服务端代码的检测逻辑 漏洞进行攻击。
2. 解析调用/漏洞绕过
这类漏洞直接配合上传一个代码注入过的白名单文件即可,再利用解析调用/漏洞
6.服务端检测绕过(文件内容检测)
1.文件幻数检测
2.文件相关信息检测
绕过方法:
图像文件相关信息检测常用的就是 getimagesize()函数 只需要把文件头部分伪造好就 ok 了,就是在幻数的基础上还加了一些文件信息 有点像下面的结构
GIF89a (...somebinarydataforimage...) <?phpphpinfo();?> (...skippingtherestofbinarydata...)
3.文件加载检测
7.服务器解析漏洞的使用