不出网主机的几种上线方式

robots

 

前言

拿到一台边缘机器后,内网的机器很有可能大多数都不出网,这时又想上线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学到的,感谢分享。

(完)