BUUCTF n1book [第二章 web进阶]文件上传

花了一天多才搭好docker的环境,然后再来写这道只能说自己搭环境也太香啦 不过这道题也花了一点点点时间琢磨

题目分析

打开题目,发现是一如既往的文件上传界面
BUUCTF n1book [第二章 web进阶]文件上传_第1张图片
习惯性抓个包,界面源码已经完全暴露了,太长了这里就不放了(根据以往的经验和参考其他的师傅的wp 小小地分析了一下)

  listContent() as $value){
                $filename = $value["filename"];
//一段较为简单的正则,就是匹配每个文件结尾的位置,是否是.php                
                if(preg_match('/\.php$/', $filename)){
                     exit("压缩包内不允许含有php文件!");
                 }
            }
            if ($archive->extract(PCLZIP_OPT_PATH, $temp_dir, PCLZIP_OPT_REPLACE_NEWER) == 0) {
                check_dir($dir);
                   exit("解压失败");
            }

            check_dir($dir);
            exit('上传成功!');
        }else{
            move_uploaded_file($file['tmp_name'], $temp_dir.'/'.$file['name']);
            check_dir($dir);
            exit('上传成功!');
        }
    }else{
        exit('仅允许上传zip、jpg、gif、png文件!');
    }
}

这样我们上传的文件的路径就是 upload/随机值/上传的文件名

解题过程

我们构造最终文件名为/…/…/hhh.php.xxx 为什么要这样设置文件名呢?
1)/…/…/
因为我们要绕过路经检测,通过路径穿越将文件放到指定目录(通过路径穿越将文件上传到web根目录下) 那么一层是upload,一层是随机值,所以我们要穿越两层,直到根目录 这样我们才能访问得到
2)hhh.php.xxx
BUUCTF n1book [第二章 web进阶]文件上传_第2张图片
apache版本为2.4.7,当我们上传一个hhh.php是不允许上传的,但是我们上传hhh.php.xxx绕过了后缀检验,上传到了根目录,利用apache解析漏洞,我们再去访问这个文件,这时apache从后面开始解析,遇到xxx,不认识,再往前解析,php,认识,这个时候apache就会将hhh.php.xxx文件解析为hhh.php脚本文件,就可以得到shell了

首先我们先创建一个文件(不是文件夹!!),文件后缀随便,只要文件名长度满足18即可,这就成功将后缀完全覆盖了
BUUCTF n1book [第二章 web进阶]文件上传_第3张图片
将文件压缩成zip
BUUCTF n1book [第二章 web进阶]文件上传_第4张图片
在010Edtior中打开该压缩包
BUUCTF n1book [第二章 web进阶]文件上传_第5张图片
修改文件名为:/…/…/hhh.php.xxx (实操/…/…/1.php.xxx的时候行不通,觉得是长度问题,但是看有些师傅的wp又可以??有点奇怪)
BUUCTF n1book [第二章 web进阶]文件上传_第6张图片BUUCTF n1book [第二章 web进阶]文件上传_第7张图片

上传该压缩包绕过对后缀的检查,然后我们在kail中可以看到文件已经上传成功,那么就来访问一下这个文件
在这里插入图片描述
得到flag

BUUCTF n1book [第二章 web进阶]文件上传_第8张图片
补充:验证一下上传文件的路径哈哈哈
随便上传个符合后白名单的文件(图片),在kail中可以看到确实如此
BUUCTF n1book [第二章 web进阶]文件上传_第9张图片

文章参考:
https://blog.csdn.net/zy15667076526/article/details/114139749
https://www.cnblogs.com/murkuo/p/14915458.html

你可能感兴趣的:(CTF,php,安全,web安全)