0×00 题目描述
本题要求对数据包中的MIME进行检查
0×01 MIME介绍
所以首先要搞清楚MIME在数据包的哪里,MIME是个什么
关于MIME,由百度百科可知
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
即文件的后缀
常见的类型如下:
超文本标记语言文本 .html text/html
xml文档 .xml text/xml
XHTML文档 .xhtml application/xhtml+xml
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
PDF文档 .pdf application/pdf
Microsoft Word文件 .word application/msword
PNG图像 .png image/png
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
TAR文件 .tar application/x-tar
任意的二进制数据 application/octet-stream
出现在HTTP数据包中的可能位置有:
MIME信息头有:
MIME-Version:
这个头提供了所用MIME的版本号。这个值习惯上为1.0。
Content-Type:
它定义了数据的类型,以便数据能被适当的处理。有效的类型有:text,image,audio,video,applications,multipart和message。注意任何一个二进制附件都应该被叫做application/octet- stream。这个头的一些用例为:image/jpg, application/mswork,multipart/mixed,这只是很少的一部分。
Content-Transfer-Encoding:
这是所有头中最重要的一个,因为它说明了对数据所执行的编码方式,客户/MUA 将用它对附件进行解码。对于每个附件,可以使用7bit,8bit,binary ,quoted-printable,base64和custom中的一种编码方式。7bit编码是用在US ASCII字符集上的常用的一种编码方式,也就是,保持它的原样。8bit和binary编码一般不用。对人类可读的标准文本,如果传输要经过对格式有影响的网关时对其进行保护,可以使用quoted printable 。Base64是一种通用方法,在需要决定使用哪一种编码方法时,它提供了一个不用费脑子的选择;它通常用在二进制,非文本数据上。注意,任何非7bit 数据必须用一种模式编码,这样它就可以通过Internet邮件网关!
Content-ID:
如果Content-Type是message/external-body或multipart/alternative时,这个头就有用了,它超出了本文的范围。
Content-Description:
这是一个可选的头。它是任何信息段内容的自由文本描述。描述必须使用us-ascii码。
Content-Disposition:
一个试验性的头,它用于给客户程序/MUA提供提示,来决定是否在行内显示附件或作为单独的附件。
MIME段头(出现在实际的MIME附件部分的头),除了MIME-Version头,可以拥有以上任何头字段。如果一个MIME头是信息块的一部分,它将作用于整个信息体。例如,如果Content-Transfer-Encoding显示在信息(指整个信息)头中,它应用于整个信息体,但是如果它显示在一个MIME段里,它"只能"用于那个段中。
注意:其可以对自动对收到的邮件进行解密。
0×02 解题过程
所以我们先判断可以上传的文件类型以及MIME在本题中出现的位置
先上传一个jpg文件然后抓个包试试看
我们找到了MIMIE的位置,在Content-Type中
文件上传成功,说明还是jpg类型的文件可以传
那么这次就上传一个 php文件
弹出错误信息
这个提示和Pass01的提示不太一样
Pass01是弹窗形式,Pass02显然是发送了数据包页面返回的信息,所以应该是可以抓包的
于是抓包看看,然后修改Content-Type
将php的Content-Type修改和jpg一样的
然后在upload目录下找我们上传的文件
文件上传成功
接下来上传一个webshell用蚁剑连接试试,修改Content-Type为image/jpeg
上传成功
但是我到蚁剑里面死命的连不上
后来发现我发包的方法都弄错了
应该是直接在Proxy模块里面修改Content-Type头,然后Forward发送即可正常上传
然后打开蚁剑,输入上传文件的路径和密码
双击,连接成功