任意文件上传漏洞


客户端JavaScript检测

这类检测通常在上传页面里含有专门检测文件上传的 javascript 代码,最常见的就是检测扩展名是否合法

绕过方法

1 前端修改允许的类型

2 burp抓包修改

3 禁用javascript(例如火狐浏览器就有禁用JS功能)

服务端MIME检测

主要是检测Content-Type: 字段

绕过方法

burp抓包修改Content-Type: 为允许的字段

Content-Type: image/gif

Content-Type: image/png

Content-Type: image/jpeg

(我曾经看到过一个博客,他上传的文件会给你重命名后缀,好像就是检测的Content-Type,通过修改这个成php,最后他成功上传了php文件)

服务端文件扩展名检测

常使用黑名单或者白名单

绕过方法

1 文件名大小写绕过

用像 AsP,pHp 之类的文件名绕过黑名单检测

2 名单列表绕过

用黑名单里没有的名单进行攻击,比如黑名单里没有 asa 或 cer 之类

3 特殊文件名绕过(操作系统特性)

比如发送的 http 包里把文件名改成 test.asp. 或 test.asp_(下划线为空格),这种命名方式

在 windows 系统里是不被允许的,所以需要在 burp 之类里进行修改,然后绕过验证后,会

被 windows 系统自动去掉后面的点和空格,但要注意 Unix/Linux 系统没有这个特性。

4 htaccess 文件

配合名单列表绕过,上传一个自定义的.htaccess,就可以轻松绕过各种检测

5 写入方法

首先名字为1.php:jpg,会写入一个1.php的空文件,然后再上传一个文件,然后修改名字为3.<<<

这样就会把我们这个文件的内容写入到我们上传的那个1.php空文件中

参考:https://www.waitalone.cn/php-windows-upload.html

6 00截断绕过上传

1.php .jpg 空格二进制20改为00

还有一些图片木马之类的,需要结合文件包含漏洞来解析。

文件头检测

iis解析漏洞

1 目录解析以*.asp命名的文件夹里的文件都将会被当成ASP文件执行。

2 文件解析.asp;.jpg 像这种畸形文件名在“;”后面的直接被忽略,也就是说当成 .asp文件执行。IIS6.0 默认的可执行文件除了asp还包含这三种 .asa .cer *.cdx3 默认解析.asp .aspx .ashx .asa .cer这是系统默默认的后缀名

Apache解析漏洞

Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断。比如xxx.php.rar对apache来说rar是不可解析的,所以就会解析成xxx.php

nginx解析漏洞

开启cgi:SCRIPT_NAME FASTCGI:www.xx.com/a.jpg/.php(任何不存在文件)-----可以解析为.php文件a.jpg-----可以解析为.php文件a.jpg):a.php%00.jpg----解析为a.php

修复建议

上传文件的存储目录禁用执行权限

文件的后缀白名单,注意0x00截断攻击

不能有本地文件包含漏洞

及时修复web上的代码

升级web server

声明:Hack All Sec的博客|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 任意文件上传漏洞


Hacker perspective for security