文件上传操作漏洞场景挖掘思路
字数 1581 2025-08-29 22:41:32

文件上传操作漏洞场景挖掘思路

文件下载相关漏洞

1. 文件ID遍历/注入

漏洞特征

  • 下载接口出现敏感信息
  • 存在数字ID参数(userId, orderid等)
  • GET/POST参数中包含文件标识

测试方法

  • 尝试ID值+1/-1修改
  • 观察响应变化(如数据量、包长变化)
  • 构造SQL注入测试:id=2-1观察是否执行运算
  • 尝试IDOR越权(需注意鉴权字段)

示例

apis/download?id=1 → 包长6360
apis/download?id=2 → 包长6364
apis/download?id=2-1 → 包长6360(确认SQL注入)

2. 任意文件读取

常见参数

  • file, filePath, files, filename等

测试方法

  • 尝试路径遍历:file=../../etc/passwd
  • 测试伪协议:file:///etc/passwd
  • 观察图片链接形式:http://file//etc/passwd

权限判断

  • 尝试读取/root/.bash_history判断root权限
  • 读取/proc/self/status获取当前进程UID/GID
  • 读取/etc/passwd获取系统用户信息

3. type参数文件读取

测试方法

  • 修改type参数尝试读取文件
  • 即使看似无关的参数也可能存在风险

4. 400状态码路径遍历

特殊场景

  • 直接在URL路径上进行遍历测试
  • 响应400时仍可能成功读取

文件上传相关漏洞

1. 路径可控覆盖

判断方法

  • 观察请求/响应包中的路径回显
  • 修改路径参数测试是否可控

利用方法

  • 使用../实现跨目录上传
  • 覆盖网站关键文件
  • 上传webshell到web目录

2. 上传路径推测

方法

  • 删除回显路径的第一层目录尝试
  • 拼接常见web目录结构
  • 如回显saber/1.txt尝试直接上传到根目录

3. OSS云存储相关

验证方式

  1. 未上云且可预览:直接上传HTML测试XSS
  2. 阿里云OSS:查找同厂商其他站点静态文件测试覆盖
  3. 泄露bucket桶名:利用脚本覆盖文件

4. 内容类型绕过

方法

  • 上传.jpg后缀但Content-Type改为text/html
  • 上传.htaccess文件控制解析
  • 上传SVG/PDF等包含恶意代码

5. 高级利用技巧

XXE利用

  • 修改XLSX/PPTX文件插入XXE payload
  • 利用DOCTYPE声明读取文件或SSRF

软链接攻击

  • 创建指向敏感文件的软链接并打包为zip上传
  • 系统解压时会读取目标文件内容

CSRF组合

  • 可控img参数构造CSRF请求
  • 结合退出功能实现强制登出

RCE利用

  • 文件名重命名参数可能调用系统命令
  • 使用|等符号注入命令

导出功能相关漏洞

1. CSV注入

方法

  • 在导出数据中插入公式:=cmd|' /C calc'!A0
  • 当用户打开Excel时会执行命令

2. PDF导出SSRF

测试步骤

  1. 插入<iframe src="http://dnslog.cn">测试解析
  2. 确认后使用file协议读取文件:<script>document.write('<iframe src="file:///etc/passwd">')</script>
  3. 文件内容会出现在导出的PDF中

3. 未授权导出+CSRF

利用链

  1. 发现导出功能发送结果到指定邮箱
  2. 构造CSRF请求将结果发送到攻击者邮箱
  3. 诱骗已登录用户点击

4. 参数置空技巧

方法

  • 对模糊查询功能尝试置空参数
  • 使用%通配符测试信息泄露

防御建议

  1. 严格校验文件上传路径和名称
  2. 实施完善的权限控制系统
  3. 对用户输入进行严格过滤和转义
  4. 禁用危险的文件操作函数
  5. 限制文件上传类型和内容检查
  6. 实施CSRF防护机制
  7. 对导出功能增加权限校验和确认步骤

通过系统性地测试上述各个场景,可以全面挖掘文件操作相关的安全漏洞,包括但不限于任意文件读取、文件覆盖、RCE、SSRF、CSRF等高风险漏洞。

文件上传操作漏洞场景挖掘思路 文件下载相关漏洞 1. 文件ID遍历/注入 漏洞特征 : 下载接口出现敏感信息 存在数字ID参数(userId, orderid等) GET/POST参数中包含文件标识 测试方法 : 尝试ID值+1/-1修改 观察响应变化(如数据量、包长变化) 构造SQL注入测试: id=2-1 观察是否执行运算 尝试IDOR越权(需注意鉴权字段) 示例 : 2. 任意文件读取 常见参数 : file, filePath, files, filename等 测试方法 : 尝试路径遍历: file=../../etc/passwd 测试伪协议: file:///etc/passwd 观察图片链接形式: http://file//etc/passwd 权限判断 : 尝试读取 /root/.bash_history 判断root权限 读取 /proc/self/status 获取当前进程UID/GID 读取 /etc/passwd 获取系统用户信息 3. type参数文件读取 测试方法 : 修改type参数尝试读取文件 即使看似无关的参数也可能存在风险 4. 400状态码路径遍历 特殊场景 : 直接在URL路径上进行遍历测试 响应400时仍可能成功读取 文件上传相关漏洞 1. 路径可控覆盖 判断方法 : 观察请求/响应包中的路径回显 修改路径参数测试是否可控 利用方法 : 使用 ../ 实现跨目录上传 覆盖网站关键文件 上传webshell到web目录 2. 上传路径推测 方法 : 删除回显路径的第一层目录尝试 拼接常见web目录结构 如回显 saber/1.txt 尝试直接上传到根目录 3. OSS云存储相关 验证方式 : 未上云且可预览:直接上传HTML测试XSS 阿里云OSS:查找同厂商其他站点静态文件测试覆盖 泄露bucket桶名:利用脚本覆盖文件 4. 内容类型绕过 方法 : 上传.jpg后缀但Content-Type改为text/html 上传.htaccess文件控制解析 上传SVG/PDF等包含恶意代码 5. 高级利用技巧 XXE利用 : 修改XLSX/PPTX文件插入XXE payload 利用DOCTYPE声明读取文件或SSRF 软链接攻击 : 创建指向敏感文件的软链接并打包为zip上传 系统解压时会读取目标文件内容 CSRF组合 : 可控img参数构造CSRF请求 结合退出功能实现强制登出 RCE利用 : 文件名重命名参数可能调用系统命令 使用 | 等符号注入命令 导出功能相关漏洞 1. CSV注入 方法 : 在导出数据中插入公式: =cmd|' /C calc'!A0 当用户打开Excel时会执行命令 2. PDF导出SSRF 测试步骤 : 插入 <iframe src="http://dnslog.cn"> 测试解析 确认后使用file协议读取文件: <script>document.write('<iframe src="file:///etc/passwd">')</script> 文件内容会出现在导出的PDF中 3. 未授权导出+CSRF 利用链 : 发现导出功能发送结果到指定邮箱 构造CSRF请求将结果发送到攻击者邮箱 诱骗已登录用户点击 4. 参数置空技巧 方法 : 对模糊查询功能尝试置空参数 使用 % 通配符测试信息泄露 防御建议 严格校验文件上传路径和名称 实施完善的权限控制系统 对用户输入进行严格过滤和转义 禁用危险的文件操作函数 限制文件上传类型和内容检查 实施CSRF防护机制 对导出功能增加权限校验和确认步骤 通过系统性地测试上述各个场景,可以全面挖掘文件操作相关的安全漏洞,包括但不限于任意文件读取、文件覆盖、RCE、SSRF、CSRF等高风险漏洞。