upload-labs 通关攻略

项目地址:https://github.com/c0ny1/upload-labs
参考:

https://blog.csdn.net/weixin_44426869/article/details/104236854

1、上传漏洞总结

upload-labs 通关攻略_第1张图片

2、upload_labs

1、客户端使用JS校验

直接禁用JS即可,或者直接F12重新定义一下校验函数,使校验函数无效。

upload-labs 通关攻略_第2张图片

2、修改content-type

upload-labs 通关攻略_第3张图片

使用burp抓包,修改Content-Type的值为image/jpeg,成功绕过。

3、使用特殊后缀绕过

upload-labs 通关攻略_第4张图片

使用特殊后缀php3、phtml等。

4、.htaccess

AddType application/x-httpd-php .png

先上传.htaccess文件,再上传png木马

5、黑名单验证,.user.ini

先上传一个以auto_prepend_file=1.gif为内容的.user.ini文件,然后再上传一个内容为php的一句话的脚本,命名为1.gif.user.ini文件里的意思是:所有的php文件都自动包含1.gif文件。.user.ini相当于一个用户自定义的php.ini。

6、大小写绕过

7、空格绕过

没有对后缀名进行去空处理,可在后缀名中加空绕过

8、点号绕过

没有对后缀名进行去”.”处理,利用windows特性,会自动去掉后缀名中最后的”.”,可在后缀名中加”.”绕过:

9、特殊字符::$DATA绕过

没有对:: D A T A 做 过 滤 , 选 择 选 择 后 缀 为 ‘ . p h p ‘ 的 一 句 话 上 传 , 抓 包 后 在 后 面 增 加 ‘ : : DATA做过滤,选择选择后缀为`.php`的一句话上传,抓包后在后面增加`:: DATA.php::DATA`,上传成功。

10、点空格点绕过

upload-labs 通关攻略_第5张图片

11、双写绕过

12、%00截断

upload-labs 通关攻略_第6张图片

13、0x00截断

upload-labs 通关攻略_第7张图片

14、直接上传一个图片马

copy 1.jpg/b + 1.txt/b 2.jpg

upload-labs 通关攻略_第8张图片

15-17类似

18、为条件竞争

upload-labs 通关攻略_第9张图片

绕过过程:不断上传文件,在文件还没被删除前去读取文件,若上传内容为');?>,则还没被删除前去读取文件,解析之后会写入一个内容为2.php文件。使用BurpSuite的Intruder不断上传文件并不断访问所上传的文件。
注:"pass"一定要双引号,不然单引号之间乱了。

19、直接图片马

20、代码审计

upload-labs 通关攻略_第10张图片

upload-labs 通关攻略_第11张图片

upload-labs 通关攻略_第12张图片

通过审计代码得知 f i l e e x t = p a t h i n f o ( file_ext = pathinfo( fileext=pathinfo(file_name,PATHINFO_EXTENSION);就是提取文件名后缀。而$file_name是我们设置的保存名称,直接加点号绕过即可。

upload-labs 通关攻略_第13张图片

21、代码审计

upload-labs 通关攻略_第14张图片

$is_upload = false;
$msg = null;
if(!empty($_FILES['upload_file'])){
     
    //检查MIME
    $allow_type = array('image/jpeg','image/png','image/gif');
    if(!in_array($_FILES['upload_file']['type'],$allow_type)){
     
        $msg = "禁止上传该类型文件!";
    }else{
     
        //检查文件名
        $file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];
        if (!is_array($file)) {
     
            $file = explode('.', strtolower($file));
        }

        $ext = end($file);
        $allow_suffix = array('jpg','png','gif');
        if (!in_array($ext, $allow_suffix)) {
     
            $msg = "禁止上传该后缀文件!";
        }else{
     
            $file_name = reset($file) . '.' . $file[count($file) - 1];
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH . '/' .$file_name;
            if (move_uploaded_file($temp_file, $img_path)) {
     
                $msg = "文件上传成功!";
                $is_upload = true;
            } else {
     
                $msg = "文件上传失败!";
            }
        }
    }
}else{
     
    $msg = "请选择要上传的文件!";
}

你可能感兴趣的:(文件上传,文件上传)