upload-labs十六十七关

第十六关,二次渲染

源码



上图片码,图片码制作比较简单。需要一张真的图片, 一个php文件。
然后将图片和php文件组合在一起即可。
准备一张图片和一句话木马

然后在cmd中执行。

代码中$im = imagecreatefromjpeg($target_path);会对图片进行二次渲染。

二次渲染的时候把码的信息给干掉了。
怎么办呢?
把原图和他修改过的图片进行比较,看看哪个部分没有被修改。将php代码放到没有被更改的部分,再重新上传即可绕过。

upload-labs十六十七关_第1张图片

第十七关,条件竞争

源码

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 = '上传出错!';
    }
}

我们看代码他是先将图片上传上去,才开始进行判断后缀名、二次渲染。如果我们在上传上去的一瞬间访问这个文件,那他就不能对这个文件删除、二次渲染。这就相当于我们打开了一个文件,然后再去删除这个文件,就会提示这个文件在另一程序中打开无法删除。
这个地方需要对并发有一定了解才行。
总体操作是,直接上传一个php文件,利用burp抓包,然后跑一个Null payloads

upload-labs十六十七关_第2张图片

然后发包,用另一个浏览器一直访问shell.php地址,只要在上传的一瞬间,他还没来的及删除、修改就可以了。 

upload-labs十六十七关_第3张图片

你可能感兴趣的:(安全,网络)