目录
1 相关基础知识
1.1 MIME类型检测概述
1.1.1 概述
定义:MIME(Multipurpose Internet Mail Extensions)多用于互联网邮件扩展类型,是描述消息内容类型的因特尔标准,也即文件类型。MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
意义:MIME设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。然而当它被HTTP协议支持之后,它的意义就更为显著了。它使得HTTP传输的不仅是普通的文本,而变得丰富多彩。
1.1.2 文件格式
每个MIME类型由两部分组成,前面是数据的大类别,video、image、application、text、audio、multipart、message等,后面定义具体的种类。常见的MIME类型(通用型)如下表,更多类型请百度。
文件类型 | 后缀名 | MIME |
---|---|---|
超文本标记语言文本 | .html | text/html |
xml文档 | .xml | text/xml |
普通文本 | .txt | text/plain |
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 |
1.1.3 检测与绕过
如果服务端代码是通过Content-Type的值来判断文件的类型,那么就存在被绕过的可能,因为Content-Type的值是通过客户端传递的,是可以任意修改的 。
1.2 后缀名检测概述
服务器端检测除了MIME检测外,还有文件后缀名检测,检测策略包括白名单策略域黑名单策略。
黑名单策略:不允许上传名单内的后缀名的文件。对于黑名单策略限制的服务器,一般先将待上传的文件在大类中修改后缀名,测试是否能成功执行代码,如果可以,待上传后便可直接执行无需借助其他漏洞,常见的同类后缀名如下表所示:
类型 | 常见后缀名 |
---|---|
php类 | .php .php2 .php3 .php5 .phtml |
asp类 | .asp .aspx .ascx .ashx .asa .cer |
jsp类 | .jsp .jspx |
白名单策略:由白名单策略只能允许上传名单内的后缀名。为了让文件能否成功上传,可能修改的后缀名将导致文件无法正常执行,常需要配合其他漏洞来执行所上传的文件。
文件解析顺序:在Apache的解析顺序中,是从右到左开始解析文件后缀的,如果最右侧的扩展名不可识别,就继续往左判断,直到遇到可以解析的文件后缀为止,所以如果上传的文件名类似 1.php.xxxx ,因为后缀xxxx不可以解析,所以向左解析后缀php。利用该规则可以绕过黑名单检测。
尝试将后缀名修改为php类的其他后缀,然后尝试用浏览器访问看看能否正常打开,不同类型的后缀文件的可执行性测试结果如下表:
后缀名 | 能否执行 |
---|---|
.php< |