[红日安全]Web安全Day5 - 任意文件上传实战攻防
字数 1714 2025-08-18 11:39:19
Web安全实战:任意文件上传漏洞攻防详解
1. 文件上传漏洞概述
1.1 漏洞简介
文件上传漏洞是指网站WEB应用在实现文件上传功能时,未对用户提交的文件进行充分校验或过滤不严,导致攻击者可以上传恶意文件(如WebShell)并执行。
1.2 漏洞原理
当上传功能的实现代码没有严格校验上传文件的后缀和文件类型时,攻击者可以上传任意文件,包括可执行的后门文件。
1.3 漏洞危害
- 执行恶意代码
- 控制服务器
- 进行数据库操作
- 管理服务器文件
- 执行服务器命令
2. 常见上传点与绕过技术
2.1 常见上传点
- 头像上传
- 相册上传
- 附件上传
- 文章图片上传
- 前台留言上传
- 编辑器文件上传
- 个人资料上传
2.2 后缀绕过技术
- PHP: php2, php3, php5, phtml, pht
- ASP: asa, cer, cdx
- ASPX: ascx, ashx, asac
- JSP: jsp, jspx, jspf
2.3 其他绕过技术
- Content-Type绕过
- 前端JS验证绕过
- 文件解析规则绕过
- Windows环境特性绕过
- 文件名大小写绕过
- 双写绕过
- 点空格绕过
- 文件头伪造绕过
- 条件竞争绕过
3. 不同系统的解析漏洞
3.1 IIS 5.x/6.0解析漏洞
- 目录解析漏洞:创建.asp目录,该目录下所有文件都会被当作ASP解析
- 示例:
www.xxx.com/xx.asp/xx.jpg
- 示例:
- 分号解析漏洞:服务器不解析分号后的内容
- 示例:
www.xxx.com/xx.asp;.jpg
- 示例:
3.2 Nginx解析漏洞
- 低版本Nginx+PHP-CGI组合存在漏洞
- 利用方式:上传
xx.jpg内容为PHP代码,访问xx.jpg/.php - 原理:
cgi.fix_pathinfo选项导致PHP向前解析
3.3 Apache解析漏洞
- 从右至左判断后缀,直到找到可识别后缀
- 示例:
www.xxxx.com/apache.php.bbb.aaa会被解析为PHP文件 - 影响范围:使用module模式与PHP结合的所有版本Apache
4. 漏洞测试方法
4.1 手工测试
4.1.1 前端验证绕过
- 禁用浏览器JS
- 使用Burp Suite拦截修改上传请求
4.1.2 .htaccess规则文件绕过
- 上传.htaccess文件内容:
AddType application/x-httpd-php .aaa - 上传.aaa后缀的PHP文件
4.1.3 文件名大小写混合绕过
- 上传如
test.PhP等混合大小写文件
4.1.4 Windows文件流特性绕过
- 上传格式:
xxx.php::$DATA - 访问时直接访问
xxx.php
4.1.5 %00截断绕过
- 在路径参数中使用%00截断
- 示例:
save_path=../upload/1.php%00
4.1.6 文件头检测绕过
- 在PHP文件前添加图片文件头:
- JPG:
FF D8 FF E0 - PNG:
89 50 4E 47 - GIF:
GIF89a
- JPG:
4.2 工具FUZZ测试
- 使用工具生成fuzz字典
- 示例命令:
python upload-fuzz-dic-builder.py -n test -a jpg -l php -m apache --os win -o upload_file.txt - 将字典导入Burp Suite进行批量测试
5. 实战案例
5.1 Weblogic CVE-2018-2894
- 访问
/ws_utc/config.do - 修改WorkHome Dir为可写目录
- 上传WebShell
- 访问返回的时间戳路径执行命令
5.2 PHPOK任意文件上传
- 后台创建支持PHP的附件类型
- 在内容管理中上传PHP文件
- 访问上传的文件路径
5.3 FCKeditor 2.4.3文件上传
- 访问上传接口
- 使用空格绕过黑名单
- 上传PHP文件并访问
6. 漏洞修复建议
6.1 代码层面修复
- 使用白名单限制文件类型
$ext_arr = array('jpg','png','gif'); if(in_array($file_ext,$ext_arr)){ // 允许上传 } - 重命名上传文件
- 检查文件内容而不仅是扩展名
- 设置上传目录不可执行
6.2 系统层面修复
- 及时升级中间件和CMS版本
- 配置服务器禁止解析危险扩展名
- 限制上传目录权限
7. 总结
文件上传漏洞是Web安全中最常见且危害严重的漏洞之一。防御关键在于:
- 严格的文件类型校验(白名单优于黑名单)
- 服务器配置安全
- 及时更新系统和组件
- 最小权限原则
通过全面的防御措施,可以有效防止文件上传漏洞被利用。