当前位置: 首页 > news >正文

Web 安全:路径遍历(Path Traversal)攻防全解析

一、漏洞定义与危害

路径遍历(也常称目录遍历,Directory Traversal)是 Web 应用中高危文件操作类漏洞。攻击者可利用该缺陷绕过服务端目录访问控制规则,读取服务器文件系统内任意文件,部分场景下还能结合写入权限实现权限接管。

主要风险影响

  1. 窃取业务源码、配置文件,梳理应用架构与业务逻辑;
  2. 读取数据库账号、API 密钥、环境变量等核心凭据;
  3. 访问操作系统敏感文件,例如 Linux 下/etc/passwd、Windows 下C:\windows\win.ini
  4. 若服务端开放文件写入权限,攻击者可篡改系统配置、植入后门,最终实现远程代码执行(RCE),完全控制服务器。

二、漏洞成因与基础利用

该漏洞的核心根源是服务端无条件信任用户可控输入,直接将输入内容拼接后调用底层文件系统 API

在常规业务场景中,应用常通过 URL 参数动态加载文件,示例请求:/loadImage?filename=218.png后端采用基础目录 + 用户输入的拼接逻辑组合文件路径,伪代码如下:filePath = "/var/www/images/" + user_input

主流操作系统将../(Windows 系统为..\)定义为上级目录跳转符。当攻击者修改filename参数为../../../etc/passwd,拼接后完整路径为/var/www/images/../../../etc/passwd。 文件系统会逐层解析目录跳转指令,脱离预设的/var/www/images/目录限制,读取系统根目录下的etc/passwd文件,完成攻击。

三、常见防御手段及对应绕过方案

实战中应用会部署各类输入过滤规则,但多数防御仅做表层字符拦截,因解析逻辑错位可被轻松绕过,以下为典型场景:

1. 简单过滤../→ 绝对路径绕过

防御逻辑:检测并删除请求中的../跳转字符。绕过原理:主流文件系统 API 识别绝对路径时,会直接忽略前置拼接的基础目录。利用载荷filename=/etc/passwd

2. 单次字符串替换过滤 → 嵌套跳转序列绕过

防御逻辑:仅执行一次字符串替换,清除../,不做循环检测。绕过原理:单次删除后,剩余字符会重新组合成有效的目录跳转符。利用载荷....//....\/

3. 多层解码导致的漏洞 → 双重 URL 编码绕过

防御逻辑:WAF 或前置网关完成字符检测后,应用层再次对请求内容执行 URL 解码。绕过原理:HTTP 请求到达服务端时,Web 容器会自动完成一次 URL 解码,二次解码机制会放大编码载荷的利用空间。利用载荷%252e%252e%252f../双重编码) 解析流程:容器首次解码得到%2e%2e%2f,过滤规则未匹配明文../予以放行;应用二次解码还原为../,触发路径遍历。

4. 路径前缀校验 → 合法目录内回溯绕过

防御逻辑:强制要求输入内容必须以预设基础目录开头。绕过原理:输入前缀满足校验规则后,仍可使用跳转符回溯脱离目录。利用载荷filename=/var/www/images/../../../etc/passwd

5. 文件后缀名校验 → 空字节截断绕过

防御逻辑:校验文件名后缀,仅允许.png.jpg等指定格式。绕过原理:Java、PHP、Python 等高级语言依靠自身规则判定字符串长度,而底层 C 语言 API 以空字节%00(十六进制0x00)作为字符串终止位,两者解析规则存在差异。利用载荷filename=../../../etc/passwd%00.png业务层校验到后缀.png判定合法,底层文件读取接口遇到%00截断字符串,最终读取/etc/passwd

四、企业级标准化防御方案

路径遍历需从架构设计代码校验两层落地防御,杜绝单点防护失效问题。

1. 架构层:杜绝用户输入直连文件接口

最优解决方案为使用间接对象引用。后端不对外暴露真实文件路径,使用 UUID、数据库自增 ID 等唯一标识映射物理文件。用户仅传递标识参数,服务端通过映射表查询硬编码的安全路径,再执行文件读取。

2. 代码层:双层校验机制

若业务必须传递文件名,采用白名单校验 + 路径规范化校验组合防御,摒弃不安全的黑名单拦截。

  1. 严格白名单校验:通过正则表达式限制输入格式,仅允许合法字符与指定后缀,示例规则:^[a-zA-Z0-9_-]+\.(png|jpg)$
  2. 路径规范化校验:拼接基础目录与用户输入后,调用系统 API 解析出文件标准绝对路径,校验该路径是否严格处于预设基础目录范围内,防止目录逃逸。

Java 核心防御示例:

java

运行

File file = new File(BASE_DIRECTORY, userInput); // 解析为系统标准绝对路径 String canonicalPath = file.getCanonicalPath(); // 校验路径边界 if (canonicalPath.startsWith(BASE_DIRECTORY)) { // 执行文件读取逻辑 }

总结

路径遍历漏洞的本质是输入管控缺失多层组件解析规则差异。黑名单过滤、单次字符替换等浅层防御均存在绕过风险。 安全防护需优先优化架构设计,从源头隔离用户输入与文件系统;无法改造架构时,必须落地白名单 + 路径标准化的双重校验,构建闭环防御体系。

http://www.zskr.cn/news/1496446.html

相关文章:

  • VS2022在Release平台调试
  • N100软路由(五) 成型与加固--AP模式Mesh组网与网络优化
  • 推理篇第17节:实战——Llama 3部署:使用TensorRT-LLM搭建推理服务
  • 2026年氨分解产品行业技术格局与主流供应商综合评估 - 优质品牌商家
  • MySQL大表优化终极方案:单表数据量上限、卡顿解决、分表分库实战教程
  • 深入解析Kotlin中的Lambda表达式:Android开发的核心技巧
  • 软考网络工程师备考:用华为eNSP搞定这5个必考实验(含完整命令)
  • 代码随想录 打卡第五十二天
  • 从零搭建一个企业网:手把手教你用eNSP模拟真实网络规划(防火墙+NAT+VLAN)
  • CANoe仿真节点间变量不共享?一次搞懂CAPL全局变量的‘副本’机制
  • Windows 10上5分钟搞定EMQX MQTT服务器,叉车本地测试不求人
  • CAPL仿真节点隔离揭秘:为什么你的全局变量在另一个.can文件里‘失效’了?
  • 别慌!IntelliJ IDEA弹出‘File Cache Conflict’?这其实是你的‘版本时光机’
  • IDEA老用户转投Save Actions插件后,我的代码整洁度提升了200%
  • MATLAB多缝干涉光强模拟工具:自由调节缝数、缝宽、波长与屏距
  • 2026年嵩明不错的半山温泉推荐:家庭出游优选地 - 2026年企业资讯
  • Magpie窗口放大工具:5分钟快速上手,让老旧软件在高分屏上焕然一新
  • 2026年诚信拆除室内装修公司服务能力分析——以成都及周边市场为例 - 优质品牌商家
  • Perseus深度实战指南:3步高效解锁《碧蓝航线》全皮肤功能
  • 工控人必看!登录到Factory talk 网络秒解[特殊字符]再也不用被罗克韦尔软件卡脖子了
  • 最好用的局域网内多设备文件传输软件工具LANDrop
  • 成都专业名表维修与回收市场格局分析:本土服务商综合能力评测 - 优质品牌商家
  • 重新定义物联网架构:物联大师的企业级边缘计算解决方案
  • WebBuilder基础架构与模块文件运行机制详解
  • 如何基于 AI Agent 构建推理调度平台
  • 梧桐智算:专业级可研报告生成效果实测
  • PyMuPDF:这个 Python 库,把 PDF 所有操作都覆盖了
  • 苹果WWDC26引爆全端AI产品,Meta/WIMI微美全息加速抢滩XR眼镜硬件市场
  • 2026必看!独立开发者高性价比AI编程工具大全
  • Effective C++ 条款06:若不想使用编译器自动生成的函数,就应该明确拒绝