路径穿越是什么
当文件名或路径参数被直接拼接进文件操作、且没有做规范化校验时,可以用相对路径序列跳出授权目录,读取或写入目录之外的文件。验证要用无害路径探测并依靠错误差异判断,全程保持只读——一旦下载到真实敏感文件并留存,就把验证变成了泄密。
基本信息
| 常见入口 | 下载、导出、预览、模板选择、日志查看 |
|---|---|
| 验证方法 | 用相对路径序列尝试读取已知的无害公开文件 |
| 判定依据 | 响应内容与错误信息的差异 |
| 严格边界 | 只读验证,禁止写入、覆盖与删除 |
| 配套要求 | 多级编码变体用于确认过滤强度 |
典型使用场景
- 附件下载与在线预览接口的文件名参数
- 报表导出选择模板文件的接口
- 日志查看与运维诊断接口的路径参数
- 头像与图片裁剪服务的文件路径参数
- 多语言与主题包选择中的文件标识参数
验证步骤
验证步骤
# 1. 定位把路径或文件名作为参数的功能入口
# 2. 用多级相对路径尝试读取一个无害的公开说明文件
# 3. 核对返回内容确为该系统的公开文件(只判断类型,不保存内容)
# 4. 尝试一次与二次编码变体,确认过滤强度
# 5. 记录:参数名、返回值特征、状态码差异(不记录文件内容)编码变体读法
| 变体类型 | 作用 | 结果含义 |
|---|---|---|
| 原始相对路径 | 基础探测 | 直接命中说明完全未过滤 |
| 一次编码 | 绕过简单字符匹配 | 命中说明只做了字符串级过滤 |
| 二次编码 | 绕过只解码一次的场景 | 命中说明解码链路上存在缺口 |
| 路径变体写法 | 混淆路径分隔与截断 | 命中说明规范化不完整 |
修复视角:拼接后做绝对路径规范化并校验前缀,或把文件名映射到固定存储路径,不接受外部传入路径。
验证中如果意外取到真实敏感文件,立即停止、不上传不外传,并书面报告客户。