Path Traversal路径遍历内容学习笔记与靶场通关方法(附靶场地址)
字数 1772 2025-08-18 17:33:13
Path Traversal(路径遍历)漏洞全面解析与实战指南
一、路径遍历漏洞概述
1.1 基本概念
Path Traversal(路径遍历),也称为目录遍历(Directory Traversal),是一种Web安全漏洞,允许攻击者通过操纵文件路径参数访问应用程序运行服务器上的任意文件。
1.2 潜在危害
- 读取应用程序源代码和敏感数据
- 获取后端系统认证凭据
- 访问敏感操作系统文件(如/etc/passwd)
- 在某些情况下可对服务器文件进行读写操作
- 最终可能导致完全控制服务器
二、漏洞原理与基础利用
2.1 典型漏洞场景
假设一个购物应用程序通过以下方式加载商品图片:
应用程序处理流程:
- 从参数获取文件名(218.png)
- 附加到基目录(/var/www/images/)
- 最终读取路径:
/var/www/images/218.png
2.2 基础利用方法
攻击者可构造特殊路径访问系统文件:
https://insecure-website.com/loadImage?filename=../../../etc/passwd
实际读取路径变为:
/var/www/images/../../../etc/passwd
通过../返回上级目录,最终等效于/etc/passwd
2.3 Windows系统差异
Windows系统同时支持斜杠和反斜杠:
https://insecure-website.com/loadImage?filename=..\..\..\windows\win.ini
三、常见防护措施与绕过技术
3.1 过滤"../"的绕过
防护措施:直接屏蔽"../"字符串
绕过方法:
- 使用绝对路径:
filename=/etc/passwd - 适用于靶场:绝对路径绕过实验
3.2 剥离"../"的绕过
防护措施:后端删除所有输入的"../"
绕过方法:
- 使用"....//"(删除"../"后变为"../")
- 示例payload:
filename=....//....//....//etc/passwd - 对应靶场:非递归剥离序列实验
3.3 编码绕过
防护措施:服务器在传递前剥离遍历序列
绕过方法:
- URL编码:
%2e%2e%2f(../) - 双URL编码:
%252e%252e%252f - 非标准编码:
..%c0%af或..%ef%bc%8f - 对应靶场:多余URL解码实验
3.4 要求特定前缀的绕过
防护措施:要求文件名以特定基文件夹开头(如/var/www/images)
绕过方法:
- 包含基文件夹后接遍历序列:
filename=/var/www/images/../../../etc/passwd - 对应靶场:验证路径开头实验
3.5 要求特定后缀的绕过
防护措施:要求文件名以特定扩展名结尾(如.png)
绕过方法:
- 使用空字节截断:
filename=../../../etc/passwd%00.png - %00是空字节的URL编码形式
四、实战测试技巧
4.1 测试流程
- 识别文件参数:查看前端代码中的图片等资源加载方式
- 使用Burp Suite抓包分析
- 尝试基础payload(../)
- 根据响应尝试各种绕过技术
- 使用fuzz字典提升效率
4.2 关键测试点
- Windows系统尝试
..\替代../ - 多种编码方式尝试(单次/多次URL编码)
- 结合文件后缀的%00截断测试
- 观察参数是否包含基路径,尝试包含后绕过
4.3 工具使用建议
- Burp Suite Proxy和Repeater模块
- Firefox插件(如FoxyProxy)
- Path Traversal fuzz字典(可从GitHub获取)
五、防御措施
5.1 最佳实践
- 避免直接传递用户输入:尽可能避免将用户提供的输入直接传递给文件系统API
- 白名单验证:将用户输入与允许值白名单比较
- 严格字符集限制:若必须接受用户输入,限制为字母数字字符
5.2 安全编码示例(Java)
File file = new File(BASE_DIRECTORY, userInput);
if (file.getCanonicalPath().startsWith(BASE_DIRECTORY)) {
// 安全处理文件
}
5.3 规范化验证流程
- 验证用户输入
- 将输入追加到基目录
- 使用平台API规范化路径
- 验证规范化路径是否以预期基目录开头
六、总结
6.1 关键要点
- 路径遍历漏洞危害严重,可导致系统完全沦陷
- 绕过技术多样,需根据防护措施灵活应对
- Windows和Linux系统存在差异(斜杠/反斜杠)
- 编码和截断是常用绕过手段
6.2 测试思维
- 从简单payload开始,逐步尝试复杂绕过
- 注意观察应用程序行为和错误信息
- 系统信息收集(如nmap扫描)有助于针对性测试
6.3 学习资源
- PortSwigger提供的路径遍历学习路径
- GitHub上的Path Traversal payload集合
通过系统性地理解和实践这些技术,安全研究人员可以有效地发现和利用路径遍历漏洞,同时也能够为应用程序开发提供更完善的安全建议。