入门路径遍历(目录穿越)
严格来讲,就单独的路径遍历的题目其实很少,往往是和其他漏洞一起实现的
原理:在文件路径中,../ 表示 在目录结构往上移动一级
例如,我们可以构造如此结构 /var/www/images/../../../etc/passwd
而这将使得最终结构回退到 /,也就是根目录
基本 payload
URL payload
../
..\(Windows特有
..;/
(这里的 ../ 可以使用超出原本路径的个数,原因是若是超出,则当前目录会自动保持在根目录)
Nginx 配置失误
原理是 Nginx 配置的时候少打了个 /
例如:
location /files { alias /home/user/data/;}这会导致若是在我们构造的 url 里面存在 /files,它会直接被映射到 /home/user/data/ 路径中
由此,我们便可以构造路径遍历 /files../../../etc/passwd
更正漏洞:在末尾加上 /,即 /files/
绕过方式
双写绕过
双写即可
例如:....//
绝对路径绕过
直接使用绝对路径
例如:?filename=etc/passwd
限定目录绕过
后端会对不同目录进行权限限定
我们可以通过 ~ 去访问根目录 / 下的目录
编码绕过
核心就是后端在进行传参后会进行一些加密方式,这里我们在传参之前先使用该加密方式编码即可
列出一些常见的编码:
URL:../ 的一次 URL 编码为 %2E%2E%2F,二次 URL 编码为 %252E%252E%252F
..\ 的一次 URL 编码为 %2E%2E%5C,二次 URL 编码为 %252E%252E%255C
Unicode:\u002e
超长 UTF-8:\%e0%40%ae
UNC 绕过
针对 Windows 系统
关于什么是 UNC 路径可以参考这篇文章
基本格式为 \\服务器名\共享目录名\路径\文件名
\\localhost\c$\windows\win.ini 中的 c$ 是 Windows 系统默认开启的管理共享(C盘是 c$,D盘是 d$),\windows\win.ini 则是具体的路径
%00截断绕过
后端要求必须包含比如说 .jpg 等拓展名,这里我们构造 %00 去截断其后的拓展名即可
(文件上传还在追我)
这里构造的不仅仅为 %00,在类 UNIX 系统中,我们还可以尝试 %0A 去尝试绕过,以及 %20 等等
例如:?filename=../../../etc/passwd%00.jpg
这里注意:和文件上传类似,使用 POST 方法的话对参数也不会自动进行 URL 解码,需要我们先对 %00 进行解码处理
利用路径遍历上传 webshell 拿到权限(低
由于路径遍历只能够进行 读 文件
所以首先系统得存在文件包含漏洞/文件上传漏洞等等可以执行命令的漏洞
我们先准备一个反弹 shell 脚本(shell.php)
随后使用比如 SQL 注入将这个脚本写入到数据库中
随后切换目录,让服务器去下载这个文件并且给予文件执行的权限
这样,服务器上就躺着我们的 shell.php
随后我们开启监听,开始路径遍历
成功后拿到一个低权限 shell
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!