文件上传_js、mime、黑名单校验以及相关例题
客户端校验(javascript校验)
例题:http://106.12.37.37:10001/
绕过方法:
- 抓包改包
- 禁用js
服务端校验
1.content-type字段校验(MIME类型检测)
例题:http://106.12.37.37:10002/ - 检测content-type的代码示例:绕过方法:
1
2
3
4if($_FILES["upfile"]["type"]!="image/gif"){
echo "只允许上传GIF图片";
exit;
} - 抓包改content-type字段
- 改文件名后上传抓包后再改回文件名
- 长传正常文件改文件内容
2.后缀名黑名单校验
例题:http://106.12.37.37:10003/ - 判断后缀名示例代码:绕过方法:
1
2
3
4
5
6
7
8
9
10
11
12
13$uptypes = array("php","php3");
$filename=$_FILES["upfile"]["name"];
function getFileExt($file_name){
while($dot = strpos($file_name,".")){
$file_name = substr($file_name,$dot+1);
}
return $file_name;
}
$filetype = strtolower(getFileExt($filename));
if(in_array($filetype,$uptypes)){
echo "非法文件禁止上传";
exit();
} - 大小写绕过,例如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
2
3<FilesMatch "jpg">
SetHandler application/x-httpd-php
</FilesMatch> - 使用00截断
详见:https://blog.csdn.net/Fly_hps/article/details/79658059
和
http://www.admintony.com/%E5%85%B3%E4%BA%8E%E4%B8%8A%E4%BC%A0%E4%B8%AD%E7%9A%8400%E6%88%AA%E6%96%AD%E5%88%86%E6%9E%90.html
例题:http://ctf5.shiyanbar.com/web/upload/ - 超长文件名截断上传
windows 258byte | linux4096byte