Upload-labs Pass-11 Pass-12 截断漏洞

Pass-11 %00截断

0x01 过程

Upload-labs Pass-11 Pass-12 截断漏洞_第1张图片
直接传php得到提示,又是白名单了,扔到burpsutie里面看。
Upload-labs Pass-11 Pass-12 截断漏洞_第2张图片
发现了好东西,保存的路径出现在了url中,可以直接采用%00截断。
Upload-labs Pass-11 Pass-12 截断漏洞_第3张图片
改好了文件后缀名和URL中的路径后,仍然提示上传出错,这里应该就是php版本的问题了。目录的版本是5.3.4,而00截断在5.3.4以后就修复了,同时magic_quotes_gpc需要为Off状态,所以我手动的将5.3.4回退到5.2.17了。不得不说,真的麻烦,花了我几个小时,再试一次。
Upload-labs Pass-11 Pass-12 截断漏洞_第4张图片
这次成了,解析一下,注意,00后面是被截断的,不要加在后面了。
Upload-labs Pass-11 Pass-12 截断漏洞_第5张图片
太难了,太难了,今天早上5点才睡阿,还特么的没搞好,早上把phpstudy的包拿出来改一下才好。。。

0x02 函数分析

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

可以看到这里增加了sava_path参数,给了我们截断绕过的机会。


Pass-12 0x00截断

0x01 过程

这题和上一题基本一样,只是save_path不在URL中了,而在POST数据里面,由于POST里面的数据不会被url自动解码,所以要稍微改变一下,首先,先改好路径,然后再路径后面加上一个字符,什么字符都可以,这里我为了方便用+号。
Upload-labs Pass-11 Pass-12 截断漏洞_第6张图片
然后再点击Hex,找到对应+的十六进制数据2b
Upload-labs Pass-11 Pass-12 截断漏洞_第7张图片
直接双击2b改为00,再切回到RAW,查看报文。
Upload-labs Pass-11 Pass-12 截断漏洞_第8张图片
直接GO,查看返回结果。
Upload-labs Pass-11 Pass-12 截断漏洞_第9张图片
访问,解析成功。
Upload-labs Pass-11 Pass-12 截断漏洞_第10张图片
因为是十六进制所以这种截断叫做是0x00截断,其实是%00截断最终被url解码还是会变成0x00的。在url%00表示ascll码中的0,而ascii0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。这是一样的道理,所以这里还有另外一种做法。
Upload-labs Pass-11 Pass-12 截断漏洞_第11张图片
直接在后面加上%00然后选中,右键如下图进行url解码即可,或者直接按ctrl+shfit+u
Upload-labs Pass-11 Pass-12 截断漏洞_第12张图片
效果会是一样的。
Upload-labs Pass-11 Pass-12 截断漏洞_第13张图片
源码不用分析什么,就是将GET换成了POST而已。

$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;	//换成了POST

        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传失败";
        }
    } else {
        $msg = "只允许上传.jpg|.png|.gif类型文件!";
    }
}

你可能感兴趣的:(#,Upload-labs)