【文件上传】
文件上传漏洞 FileUpload
0x01 定义
服务端未对客户端上传文件进行严格的 验证和过滤造成可上传任意文件情况;
0x02 攻击满足条件:
1. 上传文件能够被Web容器解释执行
2. 找到文件位置
3.上传文件未被改变内容。(躲避安全检查,格式化,图片压缩等功能)
0x03 绕过
- 文件名检查
上传时,用0x00
截断文件名、改变请求包中上传类型Content-Type
原理:许多语言对字符串的函数0x00
被认为是终止符 - 文件头类型检查
原理:将文件内容改为特定文件内容头的格式。此时需要保证上传文件能够被web容器解析。如上传含php的.jpg文件,是不能被PHP解释器调用的,应该是.php。 - 了结web server功能特性后的绕过
如:server判断文件名字符串的前后顺序,解析过程等 - 钓鱼
如;通过利用XSS、服务器端302跳转等功能,从正常的网站跳转到钓鱼网站 - 竞争条件攻击
条件:一些位置允许上传任意文件,但会检查是否包含webshell,若是则会删除。利用上传成功和删除之间时间差执行脚本。
0x04文件上传 防御
- 判断文件类型,使用白名单
- 改写文件名和文件路径
- 将文件存储server放到与上传server不同域中。(同源策略)