文件上传漏洞挖掘与防御全解析
文件上传漏洞挖掘方法
理解文件上传漏洞原理文件上传漏洞通常出现在Web应用程序允许用户上传文件但未对文件类型、内容或扩展名进行严格验证时。攻击者可上传恶意文件(如Webshell)到服务器,进而执行任意代码或控制服务器。
常见的文件上传漏洞类型
- 客户端验证绕过:仅依赖JavaScript验证文件类型
- 服务端未验证MIME类型:仅检查HTTP头中的Content-Type
- 黑名单过滤不完善:未覆盖所有危险扩展名(如.php5,.phtml)
- 解析漏洞:服务器配置错误导致文件被错误解析
挖掘方法
检查客户端验证机制尝试直接修改HTTP请求中的Content-Type或文件扩展名,使用Burp Suite拦截并修改上传请求。将image/jpeg改为application/x-php,或将test.jpg改为test.php。
测试服务端过滤规则上传不同扩展名的文件测试过滤规则:
- 常规图片扩展名:.jpg,.png,.gif
- PHP变种扩展名:.php3,.php4,.php5,.phtml
- 大小写变体:.PhP,.pHp
- 特殊字符:test.php%00.jpg
测试双重扩展名绕过尝试组合扩展名如:
file.php.jpg file.php%00.jpg file.php\x00.jpg测试MIME类型绕过修改Content-Type头为合法类型:
Content-Type: image/jpeg (实际文件内容为PHP代码)测试文件内容验证在合法图片尾部追加PHP代码:
copy /b normal.jpg + shell.php output.jpg测试解析漏洞针对特定服务器环境尝试:
- IIS6.0:/shell.asp;.jpg
- Apache:shell.php.jpg(配置错误时可能被解析为PHP)
- Nginx:CVE-2013-4547
测试目录穿越在文件名中包含路径遍历序列:
../../../shell.php防御建议
- 使用白名单验证文件扩展名和MIME类型
- 重命名上传文件为随机名称
- 存储上传文件在非Web可访问目录
- 使用单独的子域名托管用户上传内容
- 对图片文件进行二次渲染处理
- 设置严格的服务器解析规则
自动化工具
- Burp Suite:手动测试和修改上传请求
- OWASP ZAP:自动化扫描文件上传功能
- Upload Bypass:专门测试文件上传漏洞的工具
注意事项测试文件上传漏洞需获得授权,未经授权的测试可能违反法律。测试时应使用无害的验证脚本而非实际恶意代码。
