02.upload-labs靶场通关详解(11~17)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


1、Pass11(白名单:get00截断)

在这里插入图片描述

源码

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
   
   
    $ext_arr = array('jpg','png','gif');
    $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
    if(in_array($file_ext,$ext_arr)){
   
   
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

        if(move_uploaded_file($temp_file,$img_path)){
   
   
            $is_upload = true;
        } else {
   
   
            $msg = '上传出错!';
        }
    } else{
   
   
        $msg = "只允许上传.jpg|.png|.gif类型文件!";
    }
}

解析

① 分析代码,这是以时间戳的方式对上传文件进行命名,使用上传路径名%00截断绕过,不过这需要对文件有足够的权限,比如说创建文件夹,上传的文件名写成1.jpg, save_path改成…/upload/1.php%00 (1.php%00.jpg经过url转码后会变为1.php\000.jpg),最后保存下来的文件就是1.php

注意: php版本要小于5.3.4,5.3.4及以上已经修复该问题;magic_quotes_gpc需要为OFF状态

在这里插入图片描述

② 放包后复制图片链接,用中国蚁剑连接,连接成功

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、Pass12(白名单:post00截断)

在这里插入图片描述

源码

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
   
   
    $ext_arr = array('jpg','png','gif');
    $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
    if(in_array($file_ext,$ext_arr)){
   
   
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

        if(move_uploaded_file($temp_file,$img_path)){
   
   
            $is_upload = true;
        } else {
   
   
            $msg = "上传失败";
        }
    } else {
   
   
        $msg = "只允许上传.jpg|.png|.gif类型文件!";
    }
}

解析:

① 系统在对文件名进行读取时,如果遇到0x00,就会认为读取已经结束。但要注意是文件的十六进制内容里的00,而不是文件名中的00,所以我们要在1.php后面加一个任意的字,然后在Hex将这个字的16进制数变成00

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值