【CTF】Python Jail沙箱逃逸手法总结 PyJail All in One
字数 1139 2025-08-29 08:30:36
文件上传漏洞全面解析与防御指南
漏洞原理概述
文件上传漏洞是由于Web应用程序未对用户上传的文件进行充分验证和过滤,导致攻击者能够上传恶意文件(如Webshell)并执行,从而获取服务器权限。
文件上传检测流程
- 客户端JavaScript检测(前端检测)
- 服务端MIME类型检测
- 服务端文件扩展名检测
- 服务端文件内容检测
绕过技术详解
1. 前端JavaScript检测绕过
- 使用Burp Suite等工具拦截请求,修改文件扩展名
- 直接禁用浏览器JavaScript执行
- 修改前端JavaScript验证逻辑
POST /upload.php HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="file"; filename="shell.php"
Content-Type: application/octet-stream
<?php @eval($_POST['cmd']); ?>
------WebKitFormBoundaryABC123--
2. MIME类型检测绕过
- 修改Content-Type为合法类型(如图片类型)
- 常见MIME类型对照:
- JPEG图像: image/jpeg
- PNG图像: image/png
- GIF图像: image/gif
- 文本文件: text/plain
3. 文件扩展名检测绕过
- 大小写绕过:.pHp, .pHp5, .Phtml
- 特殊扩展名:.php3, .php4, .php5, .php7, .phtml
- 点号绕过:.php.
- 空格绕过:.php
- ::\(DATA绕过(Windows NTFS特性):.php::\)DATA
- 双扩展名:.php.jpg, .php.png
- 配置文件添加可执行扩展名:.xyz, .abc
4. 文件内容检测绕过
- 在恶意代码前添加文件头(如GIF89a)
- 使用图片马(将恶意代码附加到正常图片中)
- 利用Exif数据插入PHP代码
5. 其他高级绕过技术
- .htaccess文件攻击(Apache服务器):
AddType application/x-httpd-php .xyz
- Windows解析特性:
shell.php:.jpg或shell.php:1.jpg - 竞争条件攻击(文件上传后到安全检查前的短暂时间窗口)
防御措施
1. 前端防御
- 仅作为辅助手段,不可依赖
2. 服务端防御
- 白名单验证:只允许特定文件扩展名
- 重命名文件:使用随机文件名保存上传文件
- 限制文件大小:防止大文件攻击
- 文件内容检查:使用病毒扫描、二进制检测
- 权限控制:上传目录禁止执行权限
- 存储分离:将文件存储在专用服务器或对象存储中
- 日志记录:详细记录所有上传操作
3. 安全配置
Apache服务器配置示例:
<Directory "/var/www/uploads">
php_flag engine off
RemoveHandler .php .php3 .php4 .php5 .phtml
</Directory>
Nginx服务器配置示例:
location ~* /uploads/.*\.(php|php3|php4|php5|phtml)$ {
deny all;
}
检测与修复流程
- 定期进行安全审计和渗透测试
- 使用WAF(Web应用防火墙)防护
- 及时更新和修补系统漏洞
- 实施最小权限原则
- 建立文件上传安全策略和应急响应机制
总结
文件上传漏洞是Web安全中的重要威胁,需要采用多层防御策略。开发者应始终遵循"不信任用户输入"原则,结合前端验证和服务端严格检查,确保文件上传功能的安全性。定期安全培训和代码审计是防止此类漏洞的关键措施。