ctfhub 00截断

这个00截断和我之前遇到的不太一样 之前是在文件后缀加上00截断
我们先看看源代码

if (!empty($_POST['submit'])) {
     
    $name = basename($_FILES['file']['name']);
    $info = pathinfo($name);
    $ext = $info['extension'];
    $whitelist = array("jpg", "png", "gif");
    if (in_array($ext, $whitelist)) {
     
        $des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext;
        if (move_uploaded_file($_FILES['file']['tmp_name'], $des)) {
     
            echo "";
        } else {
     
            echo "";
        }
    } else {
     
        echo "文件类型不匹配";
    }
}

$_FILES 解释(搬自php手册)
$_FILES 数组内容如下:

$_FILES[‘myFile’][‘name’] 客户端文件的原名称。

$_FILES[‘myFile’][‘type’] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。

$_FILES[‘myFile’][‘size’] 已上传文件的大小,单位为字节。

$_FILES[‘myFile’][‘tmp_name’] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在 php.ini 的 upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。

$_FILES[‘myFile’][‘error’] 和该文件上传相关的错误代码。[‘error’] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在 PHP 4.3.0 之后变成了 PHP 常量。)

basename() 函数:返回路径中的文件名部分。
$_name 是上传的文件名加后缀
$_ext 得到的就是后缀名
重点就在 $des这个变量
得到的完整路径是 GET[‘road’]+随机数+日期加前面获得的后缀名
burp抓包后我们可以看见

ctfhub 00截断_第1张图片
如果我们在这里的road参数后利用00进行截断,那后面的时间,随机数,后缀名就全部失效,我们自己设置的路径就是$des的值,也就成了上传的文件存储的完整路径如下图
ctfhub 00截断_第2张图片

显示上传成功
中国蚁剑连上即可

你可能感兴趣的:(ctfhub 00截断)