如何列出仅读取任意文件路径但没有目录列表或 sudo 的所有文件?

信息安全 linux 目录遍历
2021-09-09 05:30:05

我发现了一个路径遍历漏洞,它允许我读取服务器上不需要的任何路径sudo

为了充分利用这一点,我想知道每个目录中存在哪些文件,以便我可以阅读它们。

换句话说,我可以做cat /any/path,但ls /any/path也做不到sudo cat /any/path那么我怎样才能为他们找到尽可能多的文件cat(不尝试所有可能性......)

读取 dev 或 proc 等特殊文件,或大多数 Linux 发行版上存在的文件是可以的。例如,如果我可以读取locates/var/lib/mlocate/mlocate.db数据库,问题将得到解决:但我不能,因为我没有sudo.

如果没有列出所有文件的理想答案,我也对列出大量现有文件的答案感兴趣。

在这个特定的实例中,遍历发生在远程 VM 内部,因此权限提升本身并不是主要目标:我感兴趣的是可能在 VM 上找到的机密源代码。但也欢迎非常常见的权限提升路径,因为它们mlocate不仅可以直接在其他系统中使用,而且可以解决问题。

更准确地说,在我的案例中,系统是基于推送 Git 服务的构建,类似于 GitHub / GH 页面(假设每个 Jekyll 构建都运行在我不知道的 VM 上)。提到这一点,因为它当然已经被供应商修复了 :) 是我创建了 Git 存储库:那是攻击向量,所以阅读 Git 存储库并不是很有趣。

2个回答

您可以尝试在世界可读索引中索引世界可访问文件的其他定位实现,通常位于/var/lib/locate/locatedb/var/cache/locate/locatedb类似的位置。

我认为不需要文件列表来提升您在典型服务器上的访问权限。通常你会知道你正在攻击的应用程序并检索它的配置文件和它的数据库并通过这种方式获取凭据。您可以尝试使用 , 等文件.netrc.ssh/id_rsa.ssh/config查看该帐户是否可以成为其他帐户的网关。如果您不确定盒子上可能运行的是什么,请尝试大量看似合理的文件名。

有点长的一件事是 PID 值,以探索正在运行的内容。Linux 下默认需要 32k 请求耗尽pid_t,最大值可以在/proc/sys/kernel/pid_max. 命令行在/proc/PID/cmdline; 您看不到打开文件的列表(您需要这样做readlink),但您可以看到它们的内容(cat /proc/PID/fd/0...)。

对于构建服务的特定情况,请检查该服务的配置文件。这应该可以帮助您找到 git 存储库。如果您已经能够找到 git checkout,请查看其中的文件.git/index.git/logs/HEADS也许还有其他文件.git/logs(尝试使用该服务以查看使用了哪些分支以及它使用了哪些操作)。这应该让您检索可以从中读取的对象 ID .git/objects

除了找到一个定位数据库之外,我想不出一种方法可以将读取文件的访问权限提升到具有典型配置的列表文件中。

在某些版本的 Unix(尤其是旧版本)上,您可以cat自己创建目录;例如,cat /any甚至cat /结果将是一个二进制文件,其格式在不同版本的 Unix 上不同,但始终包含目录中所有条目的名称(以.and开头..)及其 inode 编号(二进制形式)。因此,例如,cat /will include的输出any等。

请参阅目录何时停止作为文件读取?