![从任何位置遍历根目录或主目录](https://linux22.com/image/188806/%E4%BB%8E%E4%BB%BB%E4%BD%95%E4%BD%8D%E7%BD%AE%E9%81%8D%E5%8E%86%E6%A0%B9%E7%9B%AE%E5%BD%95%E6%88%96%E4%B8%BB%E7%9B%AE%E5%BD%95.png)
param 是我的输入,它被添加到 cat 命令中,所以基本上
eval "cat /a/really/long/path/idk/how/long/$param1"
将 param1 更改为其他内容后,我可以访问 home/root 而不必暴力破解../
's,是否有一种语法可以让我直接跳转到 root 或家就这样
cat '/a/really/long/path/idk/how/long' + $param1
变成了
cat '/a/really/long/path/idk/how/long/SYNTAX-To-HOME/.bashrc
。
答案1
如果只能选择文件名的后缀,并且想要显示从根目录开始的路径,那么使用足够数量的后缀../
是唯一的方法。无法中途从根目录“重新启动”路径。也没有办法引用文件中的主目录,因此您需要使用类似的东西../../../../../home/username
(再次,使用足够的../
),假设用户的主目录是/home/username
。
某些应用程序会对文件名执行额外的扩展,但这并不常见。一种比较常见的扩展交互的~/
应用程序是在路径的一开始就扩展的。命令行应用程序甚至不这样做,因为这种扩展是 shell 的工作。
所需的数量../
可能是也可能不是您无法控制的前缀中路径组件的数量,因为符号链接会更改有效深度。例如,如果/dir
、/foo
和/foo/bar
是目录,并且/foo/sym
是 的符号链接/dir
,/foo/bar/..
则 是根目录。但如果/sym
是 的符号链接/foo/bar
,则/sym/..
是/foo
,并且您需要/sym/../..
返回到根目录。
拥有太多../
并没有什么坏处,除非你遇到路径长度的限制。
另一种可能的方法可能是依赖到更高目录的符号链接。但这需要这样一个象征的存在,并且你需要了解它。挂载点(例如mount --bind / /a/really/long/path/root
)还可以让您转义目录树。
请注意,到目前为止我的回答讨论了文件名。如果你可以注入一个外壳命令,如 中所示eval "cat /a/really/long/path/idk/how/long/$param1"
,解析路径的方式是无关紧要的:只需注入 shell 特殊字符,例如设置param1
为nonexistent || true; cat /the/file/I/want
。