【Portswigger 学院】路径遍历

教程和靶场来源于 Burpsuite 的官网 Portswigge:Path traversal - PortSwigger

路径遍历(Path traversal)又称目录遍历(Directory traversal),允许攻击者通过应用程序读取或写入服务器上的任意文件,例如读取应用程序源代码和数据、凭证和操作系统文件,或写入应用程序所访问或控制的文件,改变应用程序的行为,甚至接管服务器。

原理

假设一个购物应用程序用下面的标签展示一个图片文件的内容:

<img src="/loadImage?filename=218.png">

通过 filename 参数指定读取 218.png 文件的内容,218.png 是一个文件的名称,既然是文件,那么就必然有一个目录,该文件所在的目录也许在代码中被定义为 /var/www/images/,那么实际读取就是 /var/www/images/218.png 文件的内容。

然而,fiilename 参数是用户可控的,如果这个参数没有做任何路径遍历的防御,那么攻击者可以将其篡改为 ../../../etc/passwd,此时读取的文件是 /var/www/images/../../../etc/passwd,即 /e

<think>我们正在讨论Burp Suite安全练兵场中的文件路径遍历漏洞攻击方法。根据之前的上下文,用户已经了解了一些基本概念和解决方案,现在需要更具体的攻击方法指导。由于引用[1]和[2]主要涉及命令注入和Collaborator服务器,与文件路径遍历直接关联不大,但我们可以参考Collaborator用于无回显场景的思路。 文件路径遍历漏洞攻击的核心是尝试通过修改文件路径参数来访问系统文件。在Burp Suite练兵场中,通常有以下步骤: 1. 识别漏洞点:寻找应用程序中读取文件的参数,例如图片查看、文件下载等功能,参数名如filename、file、path等。 2. 构造恶意路径:尝试构造特殊序列(如../)来跳出当前目录,访问系统文件。 3. 绕过防御:如果应用程序有过滤机制,需要使用各种绕过技巧。 具体攻击方法: 一、基础攻击: - 假设应用程序有一个下载文件的请求:`GET /image?filename=example.jpg` - 修改filename参数为:`../../../etc/passwd`(针对Linux系统) - 发送请求,如果响应中包含/etc/passwd文件的内容,则漏洞存在。 二、编码绕过: - URL编码:将`../`编码为`%2e%2e%2f`(即`../../`变成`%2e%2e%2f%2e%2e%2f`) - 双重URL编码:`%252e%252e%252f`(因为%25被解码为%,所以%252e会被解码为%2e,然后再解码为.) 三、特殊绕过技巧: - 使用空字节截断:当应用程序在文件名后添加后缀(如`.jpg`)时,可以使用空字节截断:`../../../etc/passwd%00` - 使用非标准路径分隔符:在Windows系统中,尝试使用反斜杠(`..\..\Windows\win.ini`),或者混合使用正反斜杠。 - 使用多余的斜杠:`////etc/passwd` - 使用点号截断(仅限旧系统):`../../../etc/passwd............................` 四、使用Burp Intruder自动化测试: - 将可疑参数标记,加载文件路径遍历的字典(包含各种绕过payload) - 设置响应匹配规则,例如检测响应中是否包含`root:x:`(Linux)或`[extensions]`(Windows) - 启动攻击,观察哪些payload成功返回了敏感文件内容。 五、无回显情况(使用Collaborator): - 如果无法直接看到文件内容,但怀疑存在漏洞(例如应用程序的行为发生变化),可以尝试让目标服务器访问外部服务器。 - 构造payload:`filename=../../../etc/passwd$(curl http://collaborator-subdomain.burpcollaborator.net)` - 在Burp Collaborator中查看是否有HTTP请求或DNS查询,以确认命令执行(注意:这需要目标服务器能执行命令,通常文件路径遍历不会执行命令,但有时如果应用程序将文件名用于命令中,则可能。在纯文件路径遍历中,Collaborator不能直接用于验证,除非文件名被用于其他有命令注入风险的场景。严格来说,文件路径遍历无回显通常不会采用Collaborator,而是通过其他间接方式如时间延迟或报错差异,但Collaborator可以用于检测因文件名导致的额外漏洞。) 注意:Collaborator在文件路径遍历中的典型应用是当文件名被传递给一个可以触发外部请求的函数(如curl)时,但这种情况较少。对于无回显的文件路径遍历,更常用的方法是利用报错信息(如尝试访问不存在的文件)或时间延迟(如尝试读取/dev/sleep等文件,但此方法不通用)。 六、Burp Suite练兵场实验: - PortSwigger Web Security Academy中的文件路径遍历实验包含了多个级别,从基础到高级绕过,建议用户逐个完成。 防御建议(根据之前内容补充): - 使用白名单验证文件名。 - 使用安全的API获取文件名,如Java的`Path.getFileName()`,避免使用用户输入直接拼接路径。 - 在Linux系统上,可以使用`chroot`或容器限制文件系统访问。 根据用户需求,生成相关问题: §§相关问题§§ 1. 在文件路径遍历漏洞中,如何利用时间延迟技术确认漏洞存在? 2. 哪些特殊字符可用于截断文件路径(如空字节)?在不同操作系统上有何差异? 3. 如何使用Burp Suite的Scanner自动检测文件路径遍历漏洞? 4. 文件路径遍历漏洞如何升级为远程代码执行(RCE)? 注意:由于引用[1]和[2]是关于命令注入的,我们在回答中不直接引用它们,但Collaborator的使用方法在文件路径遍历中可能不直接适用,所以需要说明其适用场景有限。 </think>### Burp Suite安全练兵场:文件路径遍历漏洞攻击方法 #### 一、基本攻击流程 1. **漏洞点定位** 识别文件操作参数(如 `filename=`、`file=`、`path=`),通常在图片加载、文件下载、模板包含等接口中出现[^1]。 2. **基础Payload构造** ```http GET /image?filename=../../../etc/passwd HTTP/1.1 ``` - **关键技巧**: - Linux系统:`../../etc/passwd`(用户信息) - Windows系统:`..\..\Windows\win.ini`(系统配置) - 递归深度:通常需要 3-5 级 `../` 跳出Web根目录 #### 二、绕过防御的进阶技巧 1. **编码绕过** | 防御机制 | Payload示例 | 原理 | |----------------|--------------------------------|------------------| | URL过滤 | `%2e%2e%2fetc%2fpasswd` | URL编码解码 | | 双重过滤 | `....//....//etc/passwd` | 路径归一化绕过 | | 空字节截断 | `../../../etc/passwd%00.png` | 截断后缀校验 | 2. **特殊字符注入** ```http GET /load?file=....\/....\/etc/passwd HTTP/1.1 # 反斜杠绕过 GET /?filename=/var/www/%252e%252e%252fpasswd # 双重URL编码 ``` #### 三、Burp Suite实战操作 1. **Proxy拦截与Repeater测试** ```mermaid graph LR A[拦截含filename的请求] --> B[发送至Repeater] B --> C{修改参数} C --> D[基础路径遍历] C --> E[编码绕过] C --> F[空字节注入] D/E/F --> G[检查响应内容] ``` 2. **Intruder自动化爆破** - **步骤**: 1. 标记参数位置:`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值