总结一下cs中上线不出网主机的几种方式。
SMB Beacon
该方法通过已有的父Beacon使用SMB协议进行正向连接不出网机器,要求目标开启445端口,通过命名管道进行认证即可上线。其实有点像psexec这样的工具,有用户名和hash后,即可执行远程命令,其原理相似。内网的机器密码相同的情况很多,这也是为什么现在为了提高安全性不能批量设置密码,内网渗透一但有了密码往往有时候就宣告结束。
并且有个好处就是SMB协议一般防火墙是不拦截的,在一定程度上可以规避防火墙拦截。
上线边缘主机
设置smb监听
进行内网ip扫描
发现ip为128的主机
使用psexec64进行横向
使用管理员的密码进行pth
如下所示
看下拓扑图,使用正向连接了内网主机
SMB Beacon有两个命令:link,unlink。unlink则会断开连接,link会重新连接
TCP Beacon
这种方式一般试用于:密码撞不上,内网机器有web服务。这里做个代理,假设已经写入了shell文件,用冰蝎挂代理去连webshell。
冰蝎连接shell成功
然后创建一个tcp隧道,这里端口默认的是4444
横向的时候最好都使用这个带s的windows可执行文件,s的含义为Stageless,相对的是Stager。
Stager是分步式,分阶段的,只用少部分代码来请求和加载payload,cs的加载payload模式为反射加载beacon.dll,但这个beacon.dll并不在可执行文件中,而是在远程C2服务端。
Stageless则是将beacon.dll包含在可执行文件中,并且可能有写额外的操作,于是文件比较大,特征也更明显,但是适合横向不出网机器,因为不出网所以有可能请求不了c2服务端上的beacon.dll。
stager需要get请求才能把真正的shellcode注入到内存,而stagerless不需要get请求,整个shellcode都在在文件中,无需发起get请求。而在内网中的机器往往无法访问外网(vps)所以无法发起get请求,故没有stager的tcp beacon
看一下无状态文件跟普通文件的大小区别
上传生成的beacon.exe
执行beacon.exe
这里执行之后还需要执行connect ip
的操作
可以发现已经连接成功
拓扑图如下,为tcp正向连接
同样是可以使用unlink来断开连接,这里与SMB Beacon不一样的是,如果Beacon进程是以普通权限运行的话,进程会直接死掉,再connect就会失败。
这里由于是Administrator权限,unlink后可以通过connect重新连接回来。
Reverse TCP Beacon
也可以被称为中继上线。
同样需要有内网web,传shell。右键跳板机shell,选择中转操作,监听中转
新建监听,注意这个地方需要设置为内网能够访问到的网卡地址
还是生成无状态的后门文件
执行beacon.exe就可以直接上线
拓扑图为反向的tcp连接
值得注意的是,中继方法无法unlink后重连,不管权限如何,一旦unlink后进程直接结束。要想重新上线只能重新执行beacon.exe
后记
感谢hxd@SD的文章,受益匪浅!