[红日安全]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 其他绕过技术

  1. Content-Type绕过
  2. 前端JS验证绕过
  3. 文件解析规则绕过
  4. Windows环境特性绕过
  5. 文件名大小写绕过
  6. 双写绕过
  7. 点空格绕过
  8. 文件头伪造绕过
  9. 条件竞争绕过

3. 不同系统的解析漏洞

3.1 IIS 5.x/6.0解析漏洞

  1. 目录解析漏洞:创建.asp目录,该目录下所有文件都会被当作ASP解析
    • 示例:www.xxx.com/xx.asp/xx.jpg
  2. 分号解析漏洞:服务器不解析分号后的内容
    • 示例: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 前端验证绕过

  1. 禁用浏览器JS
  2. 使用Burp Suite拦截修改上传请求

4.1.2 .htaccess规则文件绕过

  1. 上传.htaccess文件内容:
    AddType application/x-httpd-php .aaa
    
  2. 上传.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

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

  1. 访问/ws_utc/config.do
  2. 修改WorkHome Dir为可写目录
  3. 上传WebShell
  4. 访问返回的时间戳路径执行命令

5.2 PHPOK任意文件上传

  1. 后台创建支持PHP的附件类型
  2. 在内容管理中上传PHP文件
  3. 访问上传的文件路径

5.3 FCKeditor 2.4.3文件上传

  1. 访问上传接口
  2. 使用空格绕过黑名单
  3. 上传PHP文件并访问

6. 漏洞修复建议

6.1 代码层面修复

  1. 使用白名单限制文件类型
    $ext_arr = array('jpg','png','gif');
    if(in_array($file_ext,$ext_arr)){
        // 允许上传
    }
    
  2. 重命名上传文件
  3. 检查文件内容而不仅是扩展名
  4. 设置上传目录不可执行

6.2 系统层面修复

  1. 及时升级中间件和CMS版本
  2. 配置服务器禁止解析危险扩展名
  3. 限制上传目录权限

7. 总结

文件上传漏洞是Web安全中最常见且危害严重的漏洞之一。防御关键在于:

  • 严格的文件类型校验(白名单优于黑名单)
  • 服务器配置安全
  • 及时更新系统和组件
  • 最小权限原则

通过全面的防御措施,可以有效防止文件上传漏洞被利用。

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文件内容: 上传.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 4.2 工具FUZZ测试 使用工具生成fuzz字典 示例命令: 将字典导入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 代码层面修复 使用白名单限制文件类型 重命名上传文件 检查文件内容而不仅是扩展名 设置上传目录不可执行 6.2 系统层面修复 及时升级中间件和CMS版本 配置服务器禁止解析危险扩展名 限制上传目录权限 7. 总结 文件上传漏洞是Web安全中最常见且危害严重的漏洞之一。防御关键在于: 严格的文件类型校验(白名单优于黑名单) 服务器配置安全 及时更新系统和组件 最小权限原则 通过全面的防御措施,可以有效防止文件上传漏洞被利用。