文件上传
概述
因为业务功能需求,很多web站点都有文件上传的接口,如:
- 注册上传头像(如jpg,png,gif等)
- 上传文件附件
文件上传本身没有问题关键在于文件上传后服务器怎么处理、解释文件。
要能利用有几个要素
- 文件能被访问(可配合php文件解析漏洞)
- 文件能被当作脚本执行
上传和绕过
客户端
- 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服务器,让他执行这个文件,即使他的扩展名不应当被执行。
- Apache的.htaccess文件上传解析漏洞
- IIS6.0解析漏洞:(Windows2003)目录路径检测解析绕过上传漏洞、分号解析、畸形文件名解析
- ngnix解析漏洞
参考
http://thief.one/2016/09/21/服务器解析漏洞/
https://paper.seebug.org/560/#_17
https://www.secpulse.com/archives/78800.html
白帽子讲web安全
黑白名单绕过
- 文件名大小写绕过:用像 AsP,pHp 之类的文件名绕过黑名单检测
- 名单列表绕过:用黑名单里没有的名单进行攻击,比如黑名单里没有 asa 或 cer 之类
白名单绕过
- 0x00 截断绕过:用像 test.asp%00.jpg 的方式进行截断。
如果上传是程序员自己写的可以尝试上面的,如果是编辑器的搜一下历史漏洞。
防御
- 存储与web服务器分离
- 白名单文件类型检测
- 随机生成文件名不暴露在前端