文件上传_js、mime、黑名单校验以及相关例题
客户端校验(javascript校验)
例题:http://106.12.37.37:10001/
绕过方法:
- 抓包改包
- 禁用js
服务端校验
1.content-type字段校验(MIME类型检测)
- 检测content-type的代码示例:
1 | if($_FILES["upfile"]["type"]!="image/gif"){ |
绕过方法:
- 抓包改content-type字段
- 改文件名后上传抓包后再改回文件名
- 长传正常文件改文件内容
2.后缀名黑名单校验
- 判断后缀名示例代码:
1 | $uptypes = array("php","php3"); |
绕过方法:
- 大小写绕过,例如Php,PhP
- 利用黑名单中没有但是能够被解析的后缀名,例如php3,php4,php5,php7,pht,phtml,phps(在/etc/apache2/mods-enabled/phpxxx.conf查看可解析的后缀名)
- 配合apache的.htaccess文件上传解析
前提:/etc/apache2/apache2.conf中的AllowOverride设为ALL
.htaccess文件示例:
1 | <FilesMatch "jpg"> |
- 使用00截断
详见:https://blog.csdn.net/Fly_hps/article/details/79658059
和
http://www.admintony.com/关于上传中的00截断分析.html
例题:http://ctf5.shiyanbar.com/web/upload/ - 超长文件名截断上传
windows 258byte | linux4096byte