CTFHub-技能树-文件上传

本文最后更新于:2024年5月22日 晚上

文件上传的相关练习,这里写到MIME验证的时候才想起来写

所以MIME验证会写的较为详细

MIME验证

1. 知识点

  MIME((Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。

​ 它是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。

​ 多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式每个MIME类型由两部分组成,前面是数据的大类别,例如声音 audio、图象 Image等,后面定义具体的种类。

常见的MME类型,例如:

  • 超文本标记语言文本 .html,html text/htm
  • 普通文本 .txt text/plain
  • RTF文本. rtf application/rtf
  • GIF图形 .gif image/gif
  • JPEG图形 . jpg image/jpeg

2. 题解

这里我们直接传一个jpg文件

直接传一个jpg文件

这样它的Content-Type就会是image/jpeg

传jpg文件

然后抓包改成php上传

抓包改成php上传

蚁剑连接即可

注意这里连接的时候输入的是http://challenge-76b3e352b9948d46.sandbox.ctfhub.com:10800/upload/mime.php,因为你通过抓包已经把php给传上去了

蚁剑连接

然后找到flag文件: 找到flag文件

打开即可

flag

00截断

先认真了解一下什么是00截断:

关于上传中的00截断分析 | AdminTony's Blog

然后就知道了,其实很简单的原理

先看一下源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (!empty($_POST['submit'])) {
$name = basename($_FILES['file']['name']);
$info = pathinfo($name);
$ext = $info['extension'];
$whitelist = array("jpg", "png", "gif");
if (in_array($ext, $whitelist)) {
$des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext;
if (move_uploaded_file($_FILES['file']['tmp_name'], $des)) {
echo "<script>alert('上传成功')</script>";
} else {
echo "<script>alert('上传失败')</script>";
}
} else {
echo "文件类型不匹配";
}
}

还是白名单,只能传"jpg", "png", "gif",那跟上题一样,先构造一个jpg文件

然后抓包:

burp抓包

改包:

改包

蚁剑连接即可:

蚁剑

参考:

CTFHub题解-技能树-Web-文件上传(无验证、前端验证)【一】 - 0yst3r - 博客园 (cnblogs.com)

CTFHub题解-技能树-Web-文件上传(.htaccess、MIME绕过、文件头检查)【二】 - 0yst3r - 博客园 (cnblogs.com)

CTFHub题解-技能树-Web-文件上传(00截断、双写后缀)【三】 - 0yst3r - 博客园 (cnblogs.com)


CTFHub-技能树-文件上传
http://viper2383.github.io/2024/05/22/CTFHub-技能树-文件上传/
作者
w1per3
发布于
2024年5月22日
许可协议