
Web应用对路径参数的解析未过滤特殊字符(如“..”),导致攻击者可绕过访问控制,读取/写入服务器上的任意文件,属于高危文件系统操作漏洞(如CVE-2023-12345,假设为Spring Boot路径遍历)。
老师口吻:路径遍历漏洞的核心是“路径穿越”,即攻击者通过构造包含“..”等特殊字符的路径,让服务器解析为父目录或根目录。以Spring Boot为例,框架通过正则表达式匹配路径变量(如/api/files/{filename}),当用户输入的路径参数包含“..”时,解析逻辑会将“..”解释为“跳转到父目录”,导致实际访问路径跳转到父目录或根目录。比如,正常路径是/home/user/docs/report.pdf,攻击者构造/home/user/..//etc/passwd,服务器实际访问/etc/passwd(系统用户密码文件)。类比:文件夹路径,正常是D:\docs\file.txt,若输入D:\docs\..\system\config.txt,就会跳过docs目录,进入system目录,访问config文件,从而绕过当前目录限制。
用表格对比正常路径、漏洞路径、文件上传漏洞:
| 比较项 | 正常路径(无漏洞) | 路径遍历漏洞(核心) | 文件上传漏洞(对比) |
|---|---|---|---|
| 定义 | 路径参数仅合法文件名,无特殊字符 | 路径参数含“..”“/”等,绕过访问控制 | 上传文件名被服务器保存,可能被读取/执行 |
| 特性 | 仅访问指定目录文件 | 访问父/根目录文件(任意文件) | 服务器存储上传文件,可被攻击者利用 |
| 影响范围 | 有限制(仅指定目录) | 无限制(任意文件,包括系统文件) | 依赖上传文件是否可访问(如存储在安全目录) |
| 修复方法 | 验证路径参数,过滤特殊字符 | 严格验证,过滤“..”“/”,或绝对路径 | 限制类型/大小,存储安全目录,禁用执行 |
| 适用场景 | 安全文件访问(如内部文件服务) | 需严格限制文件访问(Web应用、文件服务器) | 需控制文件上传的场景(论坛、表单) |
| 注意点 | 避免路径拼接漏洞(如参数拼接) | 需处理字符编码绕过(如“..%2e”) | 防止上传后文件被直接访问(如URL直接访问) |
请求示例(漏洞利用):
GET /api/files/download?filename=report.pdf HTTP/1.1GET /api/files/download?filename=../../etc/passwd HTTP/1.1/etc/passwd内容(如用户密码信息,包含用户名、密码哈希),攻击者获取敏感数据。(约90秒)
各位面试官好,我以CVE-2023-12345(假设为Spring Boot路径遍历漏洞)为例,核心结论是:该漏洞因Web应用对路径参数的解析未有效过滤特殊字符(如“..”),导致攻击者可绕过访问控制,读取或写入服务器上的任意文件,属于高危文件系统操作漏洞。原理上,Spring Boot通过正则表达式解析路径变量,当请求中包含“..”时,解析为父目录,比如正常路径是/home/user/docs/report.pdf,攻击者构造/home/user/..//etc/passwd,服务器实际访问/etc/passwd。影响范围包括Web应用、文件服务器等,利用方式是构造恶意请求(如通过URL参数传递路径),修复方案是验证路径参数,过滤“..”“/”等字符,或使用绝对路径,并限制文件访问权限。总结来说,该漏洞本质是输入验证不足,导致文件系统权限绕过。
@Valid或自定义校验器过滤路径参数,Django可通过path函数的converters参数限制路径字符,需根据框架特性调整验证逻辑。