进入到第二关之后,我们直接打开源码进行分析,由于我们现在处于学习阶段,我们主要学习做题手法、和解题思路以及方向。

这里是对MIME进行检查,而文件的MIME是我们可以控制的。而MIME是指多用途互联网邮件扩展类型,是
设定某种扩展名的文件使用那一种程序去打开或者运行,每个文件都有着自己的MIME类型。
常见的MIME类型如下:
超文本标记语言文本 .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
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
任意的二进制数据 application/octet-stream
那么我们如何去控制文件的MIME呢?还是通过抓包修改的方式,文件的MIME在http头部信息中定义的字段为Content-Type,该字段对应的值就是该文件的MIME。
我们这里直接上传一个shell.php文件,之后使用bp进行抓包。

可以看到,php文件的MIME为text/php,那么该值是否在文件上传的白名单中呢?

很明显是不在的,因此页面会输出文件类型不正确,请重新上传。

那么既然是通过http头部信息判断的,我们将php文件的Content-Type属性修改为图片的MIME可不可以呢?答案是可以的。

回到页面我们可以看到,该文件已经成功上传,并且可以正常执行。

本文作者为blog,转载请注明。