文件上传

文件上传

概述

因为业务功能需求,很多web站点都有文件上传的接口,如:

  1. 注册上传头像(如jpg,png,gif等)
  2. 上传文件附件

文件上传本身没有问题关键在于文件上传后服务器怎么处理、解释文件。

要能利用有几个要素

  1. 文件能被访问(可配合php文件解析漏洞)
  2. 文件能被当作脚本执行

上传和绕过

客户端

  • javascript校验(一般只校验后缀名)

服务端

  • 文件头content-type字段校验(image/gif)
  • 文件内容头校验(GIF89a)
  • 后缀名黑名单校验
  • 后缀名白名单校验

PUT方法

当WebDAV开启PUT,MOVE,COPY,DELETE方法时,攻击者就可以向服务器上传危险脚本文件。使用OPTIONS探测服务器支持的http方法,如果支持PUT,就进行上传脚本文件,在通过MOVE或COPY方法改名。当开启DELETE时还可以删除文件。

客户端校验

JS通过验证上传文件的扩展名来判定是否符合上传行为

通过修改js代码绕过验证,或之间通过burp抓包改字段,绕过js验证

服务器端校验

文件头content-type字段校验

绕过方式

使用Burp截取上传数据包,修改Content-Type的值,改为image/gif即可成功绕过上传webshell

服务端文件扩展名检测

检测扩展名发生在存储文件之前,然后保存,也就是说保存的文件扩展名一定,只能通过web容器等漏洞来欺骗http服务器,让他执行这个文件,即使他的扩展名不应当被执行。

  1. Apache的.htaccess文件上传解析漏洞
  2. IIS6.0解析漏洞:(Windows2003)目录路径检测解析绕过上传漏洞、分号解析、畸形文件名解析
  3. ngnix解析漏洞

参考

http://thief.one/2016/09/21/服务器解析漏洞/

https://paper.seebug.org/560/#_17

https://www.secpulse.com/archives/78800.html

白帽子讲web安全

黑白名单绕过

  1. 文件名大小写绕过:用像 AsP,pHp 之类的文件名绕过黑名单检测
  2. 名单列表绕过:用黑名单里没有的名单进行攻击,比如黑名单里没有 asa 或 cer 之类

白名单绕过

  1. 0x00 截断绕过:用像 test.asp%00.jpg 的方式进行截断。

如果上传是程序员自己写的可以尝试上面的,如果是编辑器的搜一下历史漏洞。

防御

  1. 存储与web服务器分离
  2. 白名单文件类型检测
  3. 随机生成文件名不暴露在前端
posted @ 2019-09-21 17:05  干掉那个寂寞  阅读(199)  评论(0编辑  收藏  举报