CTFweb篇——upload-labs(Pass02-Pass03)

CTFweb篇——upload-labs(Pass02-Pass03)

0X00 前言

Pass02与03在文件上传的题目中算是简单的基础题,涉及的操作不是很多。

0X01 Pass02

查看题目:
CTFweb篇——upload-labs(Pass02-Pass03)_第1张图片
这里可以看到提示是:服务器端对数据包的MIME进行检查,借用找到的很久之前的一个帖子详解

MIME类型-服务端验证上传文件的类型

开始进行上传

上传122.php 使用Burp Suite进行抓包
CTFweb篇——upload-labs(Pass02-Pass03)_第2张图片
并且更改 Content-Type 中的文件类型为:image/jpeg
CTFweb篇——upload-labs(Pass02-Pass03)_第3张图片
并且右击 send to Repeater

CTFweb篇——upload-labs(Pass02-Pass03)_第4张图片
找到绝对路径,链接菜刀。
CTFweb篇——upload-labs(Pass02-Pass03)_第5张图片
上传成功webshell。

0X01 Pass03

首先测试上传 233.php 发现 不允许上传.asp,.aspx,.php,.jsp后缀的文件,看样子是使用了黑名单呀。
CTFweb篇——upload-labs(Pass02-Pass03)_第6张图片
不过呢,更改 后缀名发现可以实现上传:CTFweb篇——upload-labs(Pass02-Pass03)_第7张图片
抓包,找到绝对路径:
CTFweb篇——upload-labs(Pass02-Pass03)_第8张图片

连接菜刀,webshell上传成功:
CTFweb篇——upload-labs(Pass02-Pass03)_第9张图片

于是,发现服务器只是对文件后缀名进行了验证,很轻松就能绕过上传。

前提是apache的httpd.conf中有如下配置代码

AddType application/x-httpd-php .php .phtml .phps .php5 .pht

查看源代码:

$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 . '文件夹不存在,请手工创建!';
    }
}

发现利用了黑名单进行了过滤,不过采用黑名单过滤会遗漏一些禁止上传的文件类型。而且分析代码发现此题过滤了大小写。

未完待续…

你可能感兴趣的:(CTFweb篇——upload-labs(Pass02-Pass03))