任务 2:修改密码文件以获取 Root 权限
Section outline
-
现在,让我们对真实的系统文件发起攻击,从而获取 root 权限。 我们选择 /etc/passwd 文件作为目标文件。该文件是全体用户可读的,但非 root 用户无法修改。文件包含用户账户信息,每个用户对应一条记录。假设我们的用户名是 seed。以下是 root 和 seed 的记录:
root:x:0:0:root:/root:/bin/bash seed:x:1000:1000:Seed,123,,:/home/seed:/bin/bash
每条记录包含七个以冒号分隔的字段。我们关注的是第三个字段,它指定了分配给用户的用户 ID (UID) 值。UID 是 Linux 中访问控制的主要依据,因此这一值对系统安全至关重要。root 用户的 UID 字段包含一个特殊值 0,这使其成为超级用户,而不是其名字。任何 UID 为 0 的用户都会被系统视为 root,无论其用户名是什么。seed 用户的 ID 仅为 1000,因此不具备 root 权限。然而,如果我们能将该值更改为 0,我们就能将其提升为 root 用户。我们将利用 Dirty COW 漏洞实现这一目标。
在实验中,我们不会使用 seed 账户,因为此账户用于本书中的大部分实验;如果在实验后忘记将 UID 改回,其他实验会受到影响。相反,我们创建一个名为 charlie 的新账户,并利用 Dirty COW 攻击将这一普通用户变为 root。
添加新账户可以使用 adduser 命令完成。账户创建后,将会在 /etc/passwd 中添加一条新记录。如下所示:
$ sudo adduser charlie ... $ cat /etc/passwd | grep charlie charlie:x:1001:1001:,,,:/home/charlie:/bin/bash
建议你保存一份 /etc/passwd 文件的副本,以防出错导致文件损坏。另一种选择是对你的虚拟机进行快照备份,这样如果虚拟机被破坏,可以随时恢复。