郑重声明:

本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。

Cobalt Strike Malleable C2

Malleable C2 是 Cobalt Strike 的一项功能, 意为 "可定制的" 的 C2 服务器。Malleable C2 允许通过修改c2配置文件,改变 Beacon 与 C2 通信时的流量特征与行为,伪造正常的通信的流量,实现一些 IDS 入侵检测防火墙的绕过。

1 Malleable-C2-Profiles 简单使用

  1. 下载 Malleable-C2-Profiles

    rsmudge/Malleable-C2-Profiles: Malleable C2 is a domain specific language to redefine indicators in Beacon's communication. This repository is a collection of Malleable C2 profiles that you may use. These profiles work with Cobalt Strike 3.x. (github.com)

    threatexpress/malleable-c2: Cobalt Strike Malleable C2 Design and Reference Guide (github.com)

  2. 调用 Malleable-C2-Profiles

    # ./teamserver [external IP] [password] [/path/to/my.profile]
    ./teamserver 192.168.0.2 qweasd malleable-c2/jquery-c2.4.0.profile
  3. 验证配置文件

    ./c2lint [/path/to/my.profile]

2 配置文件简析

2.1 配置文件结构

# this is a comment
set global_option "value"; protocol-transaction {
set local_option "value"; client {
# customize client indicators
} server {
# customize server indicators
}
}

2.2 配置文件文句

# 以 http-get 配置部分举例:
http-get {
set uri "/foobar";
client {
metadata {
base64;
prepend "user=";
header "Cookie";
}
}

2.2.1 定义Beacon客户端发送的元数据

当客户端(Beacon payload)回连TeamServer时,它会发送关于自身的元数据给 Cobalt Strike。配置文件中,我们必须定义如何编码此元数据和如何使用我们的 HTTP GET 请求发送元数据:

序号 处理步骤 作用 数据
0 Start metadata
1 base64 Base64 编码数据 bWV0YWRhdGE=
2 prepend "user=" 在数据前添加"user="字符串 user=bWV0YWRhdGE=
3 header "Cookie" 转换后的元数据存储在Cookie的客户端 HTTP 头中

2.2.2 定义 Beacon 服务器提取元数据

假设我们的 Cobalt Strike 的 web 服务器收到了获取 URI

/foobar 的 GET 请求,需要提取元数据:

序号 处理步骤 作用 数据
0 Start
1 header "Cookie" 恢复存储在Cookie的客户端 HTTP 头中的数据 user=bWV0YWRhdGE=
2 prepend "user=" 移除客户端添加的"user="字符串 bWV0YWRhdGE=
3 base64 Base64 解码数据 metadata

2.2.3 数据转换语言

2.2.4 终止语句

数据转换始以终止语句结束。在一个数据转换中只能使用一个终止语句。这个语句告诉 Beacon 和它的服务器在哪里存储转换后的数据。

2.2.5 特殊字符串

2.2.6 Headers 和 Parameters

添加额外信息到 beacon 中进行交互通信,解释器会按顺序解释你的 header 语句和 parameter 语句。格式如下:

# 强制 Beacon 在发出请求时向 /foobar URI 添加 bar=blah 参数。
http-get {
client {
parameter "bar" "blah"; # 添加一个header来让迷惑网络安全监控团队。此地无银。
http-get {
server {
header "X-Not-Malware" "I promise!";

2.2.7 参数选项

sleeptime:设置心跳包时间,单位为毫秒
jitter:默认的抖动因子(0-99%)
maxdns:通过DNS上传数据时的主机名最大长度(0-255)
uri:指定多个URI要以空格分隔。URI大小写敏感。Cobalt Strike在检入时将为每个主机随机分配URI。http-get和http-post之间的URL不能相同 ,所有URI必须唯一。

2.2.8 HTTP Staging

Beacon 是一个分阶段的 payload。这意味着 payload 被一个 stager 下载然后注入到内存中。使用C2 的 http-stager 自定义 HTTP staging 过程。

# uri_x86 选项设置用于下载 x86 payload stage 的 URI。
# uri_x64 选项设置用于下载 x64 payload stage 的 URI。
http-stager {
set uri_x86 "/get32.gif";
set uri_x64 "/get64.gif"; # client 关键字定义 HTTP 事务的客户端。
# 使用 parameter 关键字来给 URI 增加一个参数。
# 使用 header 关键字来给 stager 的 HTTP GET 请求增加一个头字段。
client {
parameter "id" "1234";
header "Cookie" "SomeValue";
} # server 关键字定义 HTTP 事务的服务器端。
# header 关键字给服务器的响应增加一个服务器头字段。
# output 关键字是一个改变 payload stage 的数据转换。这个数据转换可能仅仅是在 stage 之前添加字符串或给 stage 增加字符串。使用 print 终止语句来关闭这个输出语句块。
server {
header "Content-Type" "image/gif";
output {
prepend "GIF89a";
print;
}
}
}

2.2.9 HTTP 服务器配置

http-config {
set headers "Date, Server, Content-Length, Keep-Alive, Connection, Content-Type";
header "Server" "Apache";
header "Keep-Alive" "timeout=5, max=100";
header "Connection" "Keep-Alive”;
set trust_x_forwarded_for "true";
set block_useragents "curl*,lynx*,wget*";
} # set headers:指定 HTTP 头字段在 HTTP 响应中传递的顺序,不在列表中的 HTTP 头会被添加到末尾。
# header:在 HTTP 响应中添加 HTTP 头,如果头的值已经在响应包中存在,则忽略该值。
# set trust_x_forwarded_for:决定 Cobalt Strike 是否使用 X-Forwarded-For HTTP 头来确定请求的远程地址。如果你的 Cobalt Strike 服务器在一个 HTTP 重定向器后,请使用此选项。
# set block_useragents:配置一个阻止或回复404的 UA 列表。默认阻止 curl, lynx, wget,具体见下图。

2.2.10 自签名 SSL 证书

https-certificate {
set CN "www.bing.com";
set O "Microsoft Corporation";
set C "US";
set L "Redmond";
set OU "Microsoft IT";
set ST "WA";
set validity "365";
}

3 制作有效的 Beacon SSL 证书

https-certificate {
# 此处需要添加生成的.store文件路径
set keystore "domain.store";
# 此处需要添加,生成证书时所输入的密码
set password "mypassword";
}

  1. 创建一个 Java Keystore文件

    # keytool -genkey -keyalg RSA -keysize 2048 -validity 365 -keystore bing_domain.store
    Enter keystore password:
    Re-enter new password:
    What is your first and last name?
    [Unknown]: www.bing.com
    What is the name of your organizational unit?
    [Unknown]: Microsoft IT
    What is the name of your organization?
    [Unknown]: Microsoft Corporation
    What is the name of your City or Locality?
    [Unknown]: Redmond
    What is the name of your State or Province?
    [Unknown]: WA
    What is the two-letter country code for this unit?
    [Unknown]: US
    Is CN=www.bing.com, OU=Microsoft IT, O=Microsoft Corporation, L=Redmond, ST=WA, C=US correct?
    [no]: y
  2. 生成 Certificate Signing Request (CSR),将生成的文件提交给你的 SSL 证书供应商,他们将验证你的身份并颁发证书,可忽略

    $ keytool -certreq -keyalg RSA -file domain.csr -keystore bing_domain.store
  3. 导入SSL 厂商提供你的 Root 和其他中间证书,可忽略

    $ keytool -import -trustcacerts -alias FILE -file FILE.crt -keystore bing_domain.store
  4. 安装域名证书,可忽略

    $ keytool -import -trustcacerts -alias mykey -file domain.crt -keystore bing_domain.store
  5. 修改文件内容如下

    https-certificate {
    set keystore "bing_domain.store";
    set password "Admin123";
    set CN "www.bing.com";
    set O "Microsoft Corporation";
    set C "US";
    set L "Redmond";
    set OU "Microsoft IT";
    set ST "WA";
    set validity "365";
    }

4 流量分析

  1. 未经伪造的流量:

  2. 经过伪造的流量:直接beacon_http引用,会发现伪造成了jquery的流量

    # ./teamserver 192.168.0.2 qweasd jquery-c2.4.0.profile

  3. 使用beacon_https,会话被加密

    # ./teamserver 192.168.50.2 qweasd bingsearch_getonly.profile

    查看CS服务端所使用的证书

Cobalt Strike 之: Malleable C2 流量伪造与加密的更多相关文章

  1. Cobalt Strike 3.13的新功能

    Cobalt Strike 3.13现已推出.此版本添加了TCP Beacong,进程参数欺骗,并将Obfuscate和Sleep功能扩展到SMB和TCP Beacons. TCP Beacon Co ...

  2. Cobalt Strike系列教程第一章:简介与安装

    Cobalt Strike是一款超级好用的渗透测试工具,拥有多种协议主机上线方式,集成了提权,凭据导出,端口转发,socket代理,office攻击,文件捆绑,钓鱼等多种功能.同时,Cobalt St ...

  3. cobalt strike入门和防护

    1.入门: https://blog.csdn.net/localhost01/article/details/86741124 2.cs的防护: 由于关乎渗透人员自身的安全,建议大家好好看看,这里贴 ...

  4. Cobalt Strike特征修改

    一.Teamserver模块端口信息 vim teamserver修改Cobalt Strike默认服务端50500端口为其他任意端口 二.SSL默认证书信息 Cobalt Strike默认SSL证书 ...

  5. Cobalt Strike后渗透安装和初步使用

    Cobalt Strike安装 系统要求 Cobalt Strike要求Java 1.8,Oracle Java ,或OpenJDK . 如果你的系统上装有防病毒产品,请确保在安装 Cobalt St ...

  6. Cobalt Strike特征隐藏

    前言 首先红蓝对抗的时候,如果未修改CS特征.容易被蓝队溯源. 前段时间360公布了cobalt strike stage uri的特征,并且紧接着nmap扫描插件也发布了.虽说这个特征很早就被发现了 ...

  7. Cobalt Strike使用教程一

    Cobalt Strike使用教程一     0x00 简介 Cobalt Strike是一款基于java的渗透测试神器,常被业界人称为CS神器.自3.0以后已经不在使用Metasploit框架而作为 ...

  8. Cobalt Strike 学习

    前言 本文以一个模拟的域环境为例对 Cobalt Strike 的使用实践一波. 环境拓扑图如下: 攻击者(kali) 位于 192.168.245.0/24 网段,域环境位于 192.168.31. ...

  9. Cobalt Strike系列教程第二章:Beacon详解

    上周更新了Cobalt Strike系列教程第一章:简介与安装,文章发布后,深受大家的喜爱,遂将该系列教程的其他章节与大家分享,提升更多实用技能! 第二章:Beacon详解 一.Beacon命令 大家 ...

  10. cobalt strike 快速上手

    原文:https://klionsec.github.io/2017/09/23/cobalt-strike/#menu 0x01 关于 Cobalt Strike 1 2 3 一款非常优秀的后渗透平 ...

随机推荐

  1. linux常用指令记录

    给目标文件夹执行权限:chmod -R 777 html du -sh .  [对当前目录下所有的目录和文件的大小进行汇总,-s表示汇总,-h表示以KB, MB, GB, TB格式进行人性化显示]du ...

  2. 【书籍知识回顾与总结-2022】Java语言重点知识-多线程编程、流式编程

    一.多线程编程 二.流式编程 1.目的 简化集合和数组的操作 注意:每个流只能使用一次 2.获取流的方式 (1)单列集合:stream方法 KeySet()/values()/EntrySet() ( ...

  3. 【每日一题】【树的dfs递归,返回多次,注意都遍历完后才最终返回】2022年1月6日-112. 路径总和

    给你二叉树的根节点 root 和一个表示目标和的整数 targetSum .判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum .如果存在,返回 tr ...

  4. bug处理记录:Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=512M; support was removed in 8.0

    1. 报错: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=512M; support was removed ...

  5. Agileboot 1.6.0 发布啦 - 一款致力于规范/精简/可维护 的Springboot + Vue3的快速开发脚手架

    平台简介 AgileBoot是一套开源的全栈精简快速开发平台,毫无保留给个人及企业免费使用.本项目的目标是做一款精简可靠,代码风格优良,项目规范的小型开发脚手架. 适合个人开发者的小型项目或者公司内部 ...

  6. 从Qt到C#,通过COM组件达成跨语言跨平台链接,或者说从托管到非托管的思路

    从Qt到C#,通过COM组件达成跨语言跨平台链接,或者说从非托管到托管 写在前面 c#真的是一种非常蛋疼的语言,和别的语言兼容性差,界面开发效率也不是很高,但是胜在库功能强大,对windows的兼容好 ...

  7. TS学习笔记

    类型 类型 例子 描述 number 1,2,-2 任意数字 string 'hi',"hi" 任意字符串 boolean true,false 布尔值或者true false 字 ...

  8. 题解P3847 [TJOI2007]调整队形

    简要题意 给出一个长度为 \(n\) 的序列 \(A\),你需要执行下面的操作,将这个序列变成回文序列: 在序列左右侧或中间插入一个元素,元素数值任意. 删除一个元素. 更改一个元素的值. \(1 \ ...

  9. 基于WebSocket的实时消息传递设计

    目录 概述 整体架构 设计 流程设计 程序设计 WebSocketServer 概述 新增pom 新增配置类 创建websocket端点 WebSocketClient 概述 安装WebSocketS ...

  10. vue小技巧-vue引入样式、修改难以修改的子组件内部标签样式