路径穿越基础介绍

发布时间:2023年12月27日

感谢大家浏览我的文章!能帮助到大家,我很高兴也很荣幸,也希望大家伙儿能给我点意见建议(博客、学习路线均可,我心大,随便喷,嘿嘿)我想少走点弯路 T_T.

这是 我的个人博客, 刚刚起步,还是依托答辩,哈哈。

想尝试做 PortSwigger 相关 lab 的小伙伴可以看看这篇文章哦!PortSwiggerLabs 路径穿越 writeup 其实PortSwigger 对应的 Lab 下面就有解题思路,我单纯想膜拜一下大佬的思路,嘿嘿

废话不多说,haking for fun!


你的 web 服务器不过是我的文件管理器罢了 :-\

1 什么是路径穿越

路径穿越,path-traversal,也称为路径遍历、目录穿越/遍历(directory traversal),是一种能让攻击者通过使用一些类似 ../目录控制序列访问 web 服务器上任意文件的安全漏洞。

任意文件主要包括:

  • 程序源码和数据
  • 服务端证书
  • 敏感的系统文件,/etc/passwd

path-traversal 被 OWASP 收录的 Broken Access Control(BAC,越权访问)一栏,BAC 可是 OWASP Top 10 2021 版中的 No.1 哦。

在这里插入图片描述

2 测试方法

寻找路径穿越漏洞分两步:

  1. 输入向量枚举,定位注入点。
  2. 测试,绕过

2.1 不同OS的敏感文件位置

使用路径穿越读取敏感文件,需要攻击者了解 目标 web app 服务端的架构、操作系统及其文件管理方式,如果存在路径穿越漏洞但你不知道你想要的文件放哪就尴尬了。

  • Unix-like OS:
    • root directory: /
    • directory separator: /
    • 网站根目录:/var/www/, /var/www/images/
    • 常用 payload: ../../../etc/passwd
  • Windows OS:
    • root directory: <drive letter>:
    • directory separator: \ or /

2.2 举个栗子

以 PortSwigger Labs 中的一个简单例子进行说明:

开启 burp 再打开一个页面。

请添加图片描述
观察 HTTP history,找到一个 GET 图片文件的请求,这里可能存在路径穿越。(一堆 google 自动发的包,裂开

这里能直接看到一个访问请求,我就不枚举用户输入向量了,一般情况要要测试用户所有可能的输入向量,包括 GET 和 POST 等请求。

请添加图片描述

网页源码里面也能看到。

请添加图片描述

发送到 Repeater 重放,测试。

请添加图片描述

得到的响应报文如下,可以看到已经拿到了 /etc/passwd 的内容了。

请添加图片描述

3 常规防御与绕过

3.1 使用绝对路径

删掉所有目录遍历序列,如 ../ 等。
什么?你手痒了想试试,安排! no case, no learning

filename=/etc/passwd

3.2 双写绕过

仅将 ../ 替换为空,未对替换处理后的 filename 进行二次检查(non-recursively) no case, no learning

filename=....//..././..././etc/passwd

3.3 编码绕过

先放一个好用的编码工具:CyberChef

请添加图片描述

3.3.1 URL 编码 与 double URL 编码

../..\ 各个部分url 编码的排列组合,我简单列几个。

  • %2E%2E%2F --> …/
  • %2E%2E/ --> …/
  • …%2F --> …/
  • %252E%252E%252F
  • …%5C --> …\
  • %2E%2E%5C --> …\
  • %252E%252E%255C --> …\

3.3.2 unicode 编码

请添加图片描述

  • \u002E\u002E\u002F --> …/
  • \u002E\u002E\u005C --> …\

3.3.3 其他非标准编码

  • …%c0%af
  • …%ef%bc%8f

3.4 其他绕过方式

3.4.1 %00 截断

某些情况下 web app 会验证文件的扩展名,如必须以 .png 结尾等。如果简单构造 filename=../../../etc/passwd.png 显然无法拿到我们想要的文件。

而截断机制既能绕过输入有效性验证,又能在解析文件时拿到我们想要的文件。 no case, no learning

%00 截断:

filename=../../../etc/passwd%00.jpg

#todo

  • 调研其他截断机制?

3.4.2 必须包含某些路径

有些 web app 要求文件名中必须包含某些特定的目录 (base folder),这时我们仍可以使用 ../ 拿到我们想要的内容。no case, no learning

filename=/var/www/images/../../../etc/passwd

#todo

  • 汇总常见 Payload

4 防御手段

最有效的防御方法就是缩小攻击面,典型的例子:中国防火墙 Great Firewall。对于路径穿越的防御也同样适用,避免用户与 filesystem APIs 交互能有效减少路径穿越攻击的风险。

但大部分情况下无法避免用户提供的输入与 filesystem APIs 交互,防御方法如下:

  1. 使用白名单用户输入进行验证与过滤
  2. 使用当前操作系统路径规范化函数规范化路径后,进行过滤,最后再进行相关调用

5 工具

说实话感觉这玩意手动测试的话也太麻烦了。

一些常用的工具:

常回来看看:

6 参考链接

文章来源:https://blog.csdn.net/the_biggest_baby/article/details/135218381
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。