upload-labs

代码示例展示了PHP中一个关于文件上传的安全问题,允许通过路径截断利用白名单检查的漏洞进行恶意文件上传。关键在于找到并修改文件名以符合白名单要求的后缀,并利用POST请求中的save_path进行路径操纵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第11关(白名单)

第12关(白名单)

$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类型文件!";
    }
}

查看代码, substr用于截取字符串,strrpos用于找寻字符最后一次出现的位置,整体即找寻最后一次出现的“.”的位置,+1往后一位,从这个字符串开始截取直至末尾,其直观作用就是截取文件后缀。但是$img_path拼接路径的时候直接用save_path路径,此时即可用%00在路径上直接截断,相当于后面的拼接无效,用bp修改路径

 注意,其中得修改文件名为符合白名单要求的后缀,让其通过后缀的检测,此处与11关不同的是此处的save_path用的是POST请求,需修改二进制中的路径将php后的.的二进制改为00

此时即可上传成功 

第13关

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值