目录
注释:分析在每关开头。
第 1 关
客户端 JavaScript检验(通常为检测文件拓展名)
判断方法:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传 .jpg / .jpeg / .png
后缀名的文件,而此时并未发送数据包。
绕过办法:1.利用BurpSuite之类的代理工具进行抓包。
2.修改webshell后缀类型为允许上传类型。
3.抓包来拦截将其后缀名改为对应服务器可以解析的后缀名。
第 2 关
服务器MIME检测:即检测Content-Type的内容。
绕过方法:修改类型为允许上传的类型即可。
其余步骤同 第 1 关
源码:
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name'];
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '文件类型不正确,请重新上传!';
}
} else {
$msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';
}
}
分析:上传文件类型必须是 image/jpeg 或 image/png 或 image/gif
第 3 关
服务器文件名拓展名检测(检测根文件 extension 相关的内容)
基于黑名单检测:黑名单的安全性比白名单的安全性低很多,攻击手法自然也比白名单多。一般由个专门的
blacklist,里面包含常见的危险脚本文件。
绕过办法:1.文件大小写让绕过(Php ,PhP pHp,等)
2.黑白名单绕过(php,php2,php3,php5,phtml,asp,aspx,ascx,ashx,cer,asa,jsp,
jspx)cdx,\x00hh\x46php
3.特殊文件名绕过
1)修改数据包里的文件名为 test.php 或 test.asp_(下划线是空格)由于这种命名格式在
windows系统里是不允许的,所以在绕过上传之后windows系统会自动去掉.点和空格。Linux和
Unix中没有这个特性。
2)::$DATA(php在windows的时候如果文件名+"::DATA"会把::DATA之后的数据当作文件流处
理,不会检测后缀名,且保持"::DATA"之前的文件名,其目的就是不检查后缀名)
4.0x00截断绕过(5.2 C语言中将 \0 当作字符串的结尾)
5. .htaccess文件攻击(结合黑名单攻击)
6. 解析绕过
源码过滤部分:
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array('.asp','.aspx','.php','.jsp');
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext =