前言
前段时间在一次内网中遇到了一个问题,当时想了很多办法,虽然最终没能解决但是也学了很多东西。
现在想想也是很愁。
情景再现
大致情况就是现在处于192的网段然后有一个172网段机器的mssql账号(可以执行命令和上传文件),并且172网段上的这台服务器只对192这台机器开放了1433端口,需要到172的网段。
一张图简单明了。
端口复用
虽然最终没能解决问题,但是也是学到了不少方法来应对相似的情况。
1、netsh
netsh(Network Shell) 是一个windows系统本身提供的功能强大的网络配置命令行工具,可以查看或更改本地计算机或远程计算机的网络配置。
场景1
假如,就是说假如咱们这里放开一下限制规则
172的网段依然不出网,且只对192网段开放1433端口,但是172可以访问192的网段。那这样咱们可以通过172机器反向连接192机器然后在192机器做端口转发到攻击机器上的监听端口,这里在本地复现改了一下ip
如下图:
以及修改目标机器的防火潜规则确保其他的端口无法被访问。
使用msf生成反弹马,然后将木马上传到目标机器。
然后我们在10.211.5.10这台机器通过netsh设置端口转发将6767转发到攻击机的监听端口。
在攻击机上设置监听,然后在目标机器上执行木马。
攻击机器成功收到会话。
场景2
在场景1中我们的目标机器可以随意访问我们跳板机5.10的任意端口,假如我们这边开始增加限制目标机器不能随意访问跳板机器的端口,只能访问指定端口比如:80、445、1433、1521、3306、3389、6379、8080,这其中的一个或者多个端口,如下图。
和上面一样通过ms生成反向连接马以及上传到目标服务器,设置连接端口为80.
这里为了严谨依然通过防火墙设置端口限制,80可以访问到,其他端口均不能访问。
然后通过netsh设置端口转发。
然后在目标机器上执行木马,我们通过端口连接可以看到目标机器与跳板机的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端口上。
然后我们可以读密码或者加用户,再通过跳板机去连接远程桌面这里直接连接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
其他机器访问
socks5测试不理想,最终也是没能解决这个问题。
期待找到解决办法。