感谢大家浏览我的文章!能帮助到大家,我很高兴也很荣幸,也希望大家伙儿能给我点意见建议(博客、学习路线均可,我心大,随便喷,嘿嘿)我想少走点弯路 T_T.
这是 我的个人博客, 刚刚起步,还是依托答辩,哈哈。
想尝试做 PortSwigger 相关 lab 的小伙伴可以看看这篇文章哦!PortSwiggerLabs 路径穿越 writeup 其实PortSwigger 对应的 Lab 下面就有解题思路,我单纯想膜拜一下大佬的思路,嘿嘿
废话不多说,haking for fun!
你的 web 服务器不过是我的文件管理器罢了 :-\
路径穿越,path-traversal,也称为路径遍历、目录穿越/遍历(directory traversal),是一种能让攻击者通过使用一些类似 ../
的目录控制序列访问 web 服务器上任意文件的安全漏洞。
任意文件主要包括:
/etc/passwd
path-traversal 被 OWASP 收录的 Broken Access Control(BAC,越权访问)一栏,BAC 可是 OWASP Top 10 2021 版中的 No.1 哦。
寻找路径穿越漏洞分两步:
使用路径穿越读取敏感文件,需要攻击者了解 目标 web app 服务端的架构、操作系统及其文件管理方式,如果存在路径穿越漏洞但你不知道你想要的文件放哪就尴尬了。
/
/
/var/www/
, /var/www/images/
../../../etc/passwd
<drive letter>:
\
or /
以 PortSwigger Labs 中的一个简单例子进行说明:
开启 burp 再打开一个页面。
观察 HTTP history,找到一个 GET 图片文件的请求,这里可能存在路径穿越。(一堆 google 自动发的包,裂开
这里能直接看到一个访问请求,我就不枚举用户输入向量了,一般情况要要测试用户所有可能的输入向量,包括 GET 和 POST 等请求。
网页源码里面也能看到。
发送到 Repeater 重放,测试。
得到的响应报文如下,可以看到已经拿到了 /etc/passwd
的内容了。
删掉所有目录遍历序列,如 ../
等。
什么?你手痒了想试试,安排! no case, no learning
filename=/etc/passwd
仅将 ../
替换为空,未对替换处理后的 filename 进行二次检查(non-recursively) no case, no learning
filename=....//..././..././etc/passwd
先放一个好用的编码工具:CyberChef。
../
和 ..\
各个部分url 编码的排列组合,我简单列几个。
某些情况下 web app 会验证文件的扩展名,如必须以 .png
结尾等。如果简单构造 filename=../../../etc/passwd.png
显然无法拿到我们想要的文件。
而截断机制既能绕过输入有效性验证,又能在解析文件时拿到我们想要的文件。 no case, no learning
%00 截断:
filename=../../../etc/passwd%00.jpg
#todo
有些 web app 要求文件名中必须包含某些特定的目录 (base folder),这时我们仍可以使用 ../
拿到我们想要的内容。no case, no learning
filename=/var/www/images/../../../etc/passwd
#todo
最有效的防御方法就是缩小攻击面,典型的例子:中国防火墙 Great Firewall。对于路径穿越的防御也同样适用,避免用户与 filesystem APIs 交互能有效减少路径穿越攻击的风险。
但大部分情况下无法避免用户提供的输入与 filesystem APIs 交互,防御方法如下:
说实话感觉这玩意手动测试的话也太麻烦了。
一些常用的工具:
常回来看看: