前言
拿到一台边缘机器后,内网的机器很有可能大多数都不出网,这时又想上线cs方便后续操作。本文就如何上线不出网主机的方式进行了总结。
环境搭建
目标内网机器
- os:win server 2012
- ip:192.168.57.137
边缘机器
- os:win server 2012
- ip1:192.168.1.103(出网)
- ip2:192.168.57.136
攻击机器
- os:kali liunx
- ip:192.168.1.128
- os:ubutu 16.04
- vps ip:47.xxxxxxxx
由于边缘主机出网,选择reverse反向连接,现在已经上线边缘主机
SMB Beacon
该方法通过已有的父Beacon使用SMB协议进行正向连接不出网机器,要求目标开启445端口,通过命名管道进行认证即可上线。其实有点像psexec这样的工具,有用户名和hash后,即可执行远程命令,其原理相似。内网的机器密码相同的情况很多,这也是为什么现在为了提高安全性不能批量设置密码,内网渗透一但有了密码往往有时候就宣告结束。
并且有个好处就是SMB协议一般防火墙是不拦截的,在一定程度上可以规避防火墙拦截。
先使用hashdump和logonpasswords命令抓一波密码。由于这里是win2012系统,是无法直接抓取明文密码的,这里也不需要去修改注册表,或者通过mimilib.dll注入的方式去获取明文密码,有hash就足够了,SMB验证身份本身用的就是NTMLv2协议。
这里是抓到了该机器上的hash
有个小tips,如果对方机器是64位的,最好就用x64的exe上线就可以了,以前我觉得x32和x64都行。虽然都可以上线,但是如果用的是x32的beacon,很有可能是抓不到64位机器上的密码的,使用cs集成的mimikatz会提示:32位的mimikatz无法抓取到64位机器的密码。所以目标是最好就用64位就用64位的artifact。
然后通过端口扫描,发现内网机器:
到这里不懂原理的小白(我)可能就会直接使用cs自带的psexec功能直接去横向,恰巧我之前就是这么做的,想起来还挺有意思的。
结果就是服务已经创建了,但是上不了线,那会儿自己心里想肯定是cs出bug了,还烦了一会儿,现在想起来还挺有意思的。
本身是没有问题的,说明psexec已经成功的完成了ntml认证,并且认证成功,但是这时候shell是反弹给边缘机器的,如果要上线就要再新建一个SMB Beacon Listener。相当于通过边缘机器再中转一下,反弹shell到vps。
选择子Beacon:SMB Beacon。成功上线。
(出去吃个饭回来内网机器ip变了。。)
这里可以看下拓扑图,是通过边缘机器正向连接了不出网的内网主机。
在external后面有一个oooo,这实际上是标明了当前SMB的连接状态:
SMB Beacon有两个命令:link,unlink。
unlink则会断开连接,link会重新连接
执行命令unlink
unlink 192.168.57.140
后面的oooo变成了oo oo,说明已经断开连接,但是只是断开了连接,进程并没有被杀掉。
使用命令重新回连:
link 192.168.57.140
我在实战中暂时没有用到过这个功能,但应该是有一定作用的,持久化后门,更加隐蔽?这里具体的实战情景明白的师傅可以说一下。
TCP Beacon
这种方式一般试用于:密码撞不上,内网机器有web服务。
这里做个代理,假设已经写入了shell文件,用冰蝎挂代理去连webshell。
在cs上新增一个Listen,Tcp Beacon
横向的时候最好都使用这个带s的windows可执行文件,s的含义为Stageless,相对的是Stager。下面是我自己的理解:
Stager是分步式,分阶段的,只用少部分代码来请求和加载payload,cs的加载payload模式为反射加载beacon.dll,但这个beacon.dll并不在可执行文件中,而是在远程C2服务端。
Stageless则是将beacon.dll包含在可执行文件中,并且可能有写额外的操作,于是文件比较大,特征也更明显,但是适合横向不出网机器,因为不出网所以有可能请求不了c2服务端上的beacon.dll。
Stageless的可执行文件比Stager的可执行文件大了将近15倍。真的离谱。
然后用冰蝎上传beacon.exe。然后执行
执行后使用connect 命令连接:
connect 192.168.57.140
拓扑图如下,为tcp正向连接:
同样是可以使用unlink来断开连接,这里与SMB Beacon不一样的是,如果Beacon进程是以普通权限运行的话,进程会直接死掉,再connect就会失败。
这里由于是Administrator权限,unlink后可以通过connect重新连接回来。
Reverse TCP Beacon
也可以被称为中继上线。
同样需要有内网web,传shell。右键跳板机shell,选择Pivoting->Listener。
Listen Host为内网ip。
这里要注意一下,如果有多张网卡,这个默认的Listen Host是需要改的,需要填入同一网段的ip。
比如我这里的跳板机器就有两张网卡,默认填入的host是192.168.1.103,这个就需要改,因为内网不出网机器是无法访问到192.168.1.103这张网卡的,只能访问192.168.57.143(跳板机ip又变了)
同样生成Stageless的可执行文件。
上传后执行beacon.exe
执行后回来看cs就已经上线,不需要link或者connect了。
拓扑图为反向的tcp连接
值得注意的是,中继方法无法unlink后重连,不管权限如何,一旦unlink后进程直接结束。要想重新上线只能重新执行beacon.exe。
后记
实际情况下,由于环境原因,网络状况错综复杂。比如:stageless的可执行文件比较大,又因为挂了代理,传不上去怎么办。其实就可以将beacon.exe上传到跳板机器上,用windows自带的certutil工具,直接在内网机器上请求下载跳板机上的beacon.exe。这样确实是更加稳当的。
上面这个tips是我再看星球中的@emmm…分享的pdf学到的,感谢分享。