路径穿越基础介绍
感谢大家浏览我的文章!能帮助到大家,我很高兴也很荣幸,也希望大家伙儿能给我点意见建议(博客、学习路线均可,我心大,随便喷,嘿嘿)我想少走点弯路 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 测试方法
寻找路径穿越漏洞分两步:
- 输入向量枚举,定位注入点。
- 测试,绕过
2.1 不同OS的敏感文件位置
使用路径穿越读取敏感文件,需要攻击者了解 目标 web app 服务端的架构、操作系统及其文件管理方式,如果存在路径穿越漏洞但你不知道你想要的文件放哪就尴尬了。
- Unix-like OS:
- root directory:
/
- directory separator:
/
- 网站根目录:
/var/www/
,/var/www/images/
- 常用 payload:
../../../etc/passwd
- root directory:
- Windows OS:
- root directory:
<drive letter>:
- directory separator:
\
or/
- root directory:
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 交互,防御方法如下:
- 使用白名单对用户输入进行验证与过滤
- 使用当前操作系统路径规范化函数规范化路径后,进行过滤,最后再进行相关调用
5 工具
说实话感觉这玩意手动测试的话也太麻烦了。
一些常用的工具:
常回来看看:
6 参考链接
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!