淘先锋技术网

首页 1 2 3 4 5 6 7

文件上传漏洞总结

什么是文件上传漏洞

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。

文件上传流程

通常一个文件以 HTTP 协议进行上传时,将以 POST 请求发送至 web 服务器

web 服务器接收到请求后并同意后,用户与 web 服务器将建立连接,并传输 data

而一般一个文件上传过程中的检测如下图红色标记部分

常见文件上传检测以及绕过

客户端 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文件)

服务端检测绕过(文件扩展名检测)

黑名单检测,黑名单的安全性比白名单的安全性低很多,攻击手法自然也比白名单多

一般有个专门的 blacklist 文件,里面会包含常见的危险脚本文件

绕过方法:

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 *.cdx

3 默认解析

.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:

a.php%00.jpg----解析为a.php

修复建议

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

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

不能有本地文件包含漏洞

及时修复web上的代码

升级web server

不是很全,但是基本的应该就有了。