upload-labs系列–pass-03

J1angL1 343 0

0x00 判断文件上传限制

首先上传一个php文件尝试一下能否上传,可以发现,网页弹出的是不允许xxx上传,证明是黑名单限制,但是并没有全部限制完,那么我们这时候可以选择大小写绕过,或者同类型文件如phtml,php3这种类型的文件进行绕过。当然,我们还需要再去检查一下代码看一下有没有其他限制。

upload-labs系列--pass-03

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array('.asp','.aspx','.php','.jsp');
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //收尾去空

        if(!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;            
            if (move_uploaded_file($temp_file,$img_path)) {
                 $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

从代码里面我们可以看出来,大小写绕过是不行的,因为其中strtolower函数将我们的文件后缀名全部改为了小写,因此不能使用大小写绕过,我们尝试一下同类型文件名解析。

iis asp 禁止上传了,可以上传 asa cer cdx 这些后缀,如在网站里允许.net执行 可以上传 ashx 代替 aspx如果网站可以执行这些脚本通过上传后门即可获取 webshell在不同的中间件中有特殊的情况如果在 apache 可以开启 application/x-httpd-php, AddType application/x-httpd-php .php .phtml .php3中,后缀名为 phtml php3 均被解析成 php 。有的 apache 版本默认就会开启。上传目标中间件可支持的环境的语言脚本即可,如.phtmlphp3

upload-labs系列--pass-03

那么我们绕过就比较简单了,查找一下网站/靶场的中间件,然后根据相应中间件进行一下判断用哪些同类型文件进行解析绕过。

0x01 绕过文件上传限制

根据中间件进行操作判断,这里靶场中间件的服务器是apache的,那么我们就可以尝试一下php3和phtml解析为php进行一次绕过,我们先将shell文件后缀名改为php3尝试一下。

upload-labs系列--pass-03

我们可以看出,将后缀改为php3的话是能够成功上传的,那么我们尝试一下使用蚁剑进行连接,如果成功那么就可以进行后续操作。

upload-labs系列--pass-03

可以看出成功上传,并且php3也被成功解析为php文件,可以进行连接。

0x02 总结

我们在文件上传的时候如果碰到黑名单限制,但是并没有将同类型的限制的话,我们可以尝试一下寻找中间件的解析漏洞,尝试上传同类型文件,之后进行连接尝试。

发表评论 取消回复
表情 图片 链接 代码

分享