文件上传的一些绕过方法

文件上传漏洞所需的条件

一是文件可上传(感觉这一句是废话)。

二是上传文件路径可知,如果路径不可知就没法访问,亦无法配合诸如文件包含漏洞进行文件执行。

三是上传文件可以被访问。

四是上传文件可以被执行,当然这一步也不是必需的,比如配合文件包含漏洞。

绕过姿势

文件上传校验姿势

  • 客户端javascript校验(一般只校验后缀名)
  • 服务端校验
    • 文件头content-type字段校验(image/gif)
    • 文件内容头校验(GIF89a)
    • 后缀名黑名单校验
    • 后缀名白名单校验
    • 自定义正则校验
  • WAF设备校验(根据不同的WAF产品而定)

0X00:前端js检查后缀名

(1)、禁用浏览器端的js功能

直接删除代码中onsubmit事件中关于文件上传时验证上传文件的相关代码。

(2)、Firebug修改源码                 

直接更改文件上传JS代码中允许上传的文件扩展名你想要上传的文件扩展名。

(3)、Burpsuite抓包修改后缀名

(4)、本地表单提交

0X01:服务端MIME类型检测 contentType

Burpsuite抓包修改contentType的值

0X02:目录路径检测

(1)、用0x00进行截断(php5.3.4以下+magic_qoute_gpc为off时,魔术符号会将 ’、”、null(%00)加反斜杠转义 )

(2)、在路径中设置一个.asp的文件,利用解析漏洞(IIS6.0+ASP解析漏洞)

将path变量的值改为x.asp

当文件夹名为XX.asp时,文件夹中的文件都会以asp的格式来解析,这是利用了IIS的解析漏洞

0X03:服务端扩展名检测

(1)、基于黑名单的检测

A、文件名大小写绕过

B、名单列表绕过 asp格式的,黑名单里面没有asa cer的

C、特殊文件名绕过

x.asp_ 下划线为一个空格(需要在burp里面改以绕过验证),windows会自动去掉后面的点和空格

D、0x00截断绕过

asp 程序有此漏洞 x.asp_.jpg(下划线为00截断符) 检测时gettype()从后往前,判定为jpg,保存时一00截断符为界,将asp最为后缀名存入。

E、htaccess文件重写

重写过滤规则,允许asp格式的

(2)、基于白名单的

A、0x00截断绕过

B、解析调用/漏洞绕过                     

5、服务端文件内容检测

0X03:文件内容检测

(1)、文件幻数检测(文件头)

JPG :FF D8

GIF:47 49 46

PNG:89 50 4E

在幻数后面加上自己的一句话就可

(2)、文件相关信息检测

图像文件 getimagesize() 只需要伪造好文件头就可 在文件首部加入GIF89a

(3)、文件加载检测

代码注入绕过:找一个空白区进行代码的填充

解决方案

1、文件上传的目录设置为不可执行

2、判断文件类型:强烈推荐白名单方式。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。

3、使用随机数改写文件名和文件路径:一个是上传后无法访问;再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。

4、单独设置文件服务器的域名:由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等问题将得到解决。

 

你可能感兴趣的:(信息安全)