upload-labs 全1-21关 附详细解析(文件上传漏洞)

目录

注释:分析在每关开头。

第 1 关

第 2 关

第 3 关

第 4 关​​​

第 5 关

第 6 关​​​

第 7 关

第 8 关

第 9 关​

第 10 关

第 11 关

第 12 关

第 13 关​​​​​

第 14 关

第 15 关

第 16 关​​

第 17 关 

​​​​​​第 18 关

第 19 关​​

第 20 关​​​

第 21 关​​​


第 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 =
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值