• 红队专题-Cobalt strike4.5二次开发


    在这里插入图片描述

    招募六边形战士队员

    一起学习 代码审计、安全开发、web攻防、逆向等。。。
    私信联系
    在这里插入图片描述

    功能改造增强

    Cobalt Strike修改特征和使用cdn
    Cobalt Strike 二 开   cs4.5 魔改
    
    • 1
    • 2

    ·

    IDEA 自动换行

    File->【Settings】
    *.md; *.txt; *.rst; .adoc;.java
    在这里插入图片描述

    原版CS反编译破解

    jar包反编译

     
    CobaltStrike二次开发环境初探
    
    CobaltStrike 4.5原版 202251日 发布 + 破解及汉化加载
    
    4.3 及之前版本的暴力替换class文件的破解方法失效   
    
    
    IntelliJ IDEA自带了一个反编译java的工具  
    IntelliJ IDEA安装目录/plugins/java-decompiler.jar
    
    
    对cobaltstrike的整个jar 包进行反编译
    org/jetbrains/java/decompiler/main/decompiler/ 
    org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler 提供反编译的这个类。
    
    
    因为没MANIFEST.MF中没有main class 属性,没有指定主类,
    因此不能直接 使用 java -jar
    如果 想要执行 java包中具体的类,要 使用 javacp输入如下命令:
    
    java -cp 命令中 cp 指的就是 classpath。
    使用该命令可以运行jar中的某个指定的测试类 使用方法 Java -cp 依赖jar或者是依赖jar库
    
     
    新建两个文件
    cs_bin里面放未反编译的cobaltstrike.jar 
    再建一个CS_source_decompiler_src 文件,这个是空文件,是为了之后放反编译后的cobaltstrike
    
    
    java -cp "D:\ideaIU-2018.1.1.win\plugins\java-decompiler\lib\java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler  -dsg=true cobaltstrike.jar G:\code\Saft_Code\CS_source_decompiler_src  
    
    反编译后,会自动打包成jar包,右键解压后打开可以看到都是.java了,
    使用这个方法会非常方便,就不需要第三方工具,这个反编译出来的接放入就可以直接放到 IDEA中,
    可直接实现代码搜索,相关的交叉引用。 
    
    
     IDEA 创建一个默认项目,然后创建一个对应的
    decompile目录,
    
    将反编译的java源代码都放进去 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    在这里插入图片描述

    
    lib目录将的cobaltstrike.jar(这个jar是未反编译的jar包),放进去 
    cobaltstrike.auth 也是
    
    将decompile/aggressor.Aggressor.java 复制到src/aggressor.Aggressor.java
    右键 make Directory as  Source Root
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    在这里插入图片描述

    
    并且将该jar包导入到依赖库中    设置依赖关系
    file-->project Structure  
    modules dependencies选择lib目录下面的文件,确保是Compile  打勾点击apply  
    
    
    Artifacts--->jar--->from modules with dependencies   MainClass
    去新建一个Main Class Aggressor.Aggressor
    名字可以在lib---->cs.jar---->meta-inf---->menifest.mf中找到
    这样子可以使用菜单栏的Build里面Build Arifact进行jar打包了。结果会在out文件夹里里面。
    启动文件使用打包的jar即可。
    
    
    
    
    JAR Application
    设置对应的VM option为 -XX:ParallelGCThreads=4 -XX:+AggressiveHeap -XX:+UseParallelGC -Xms512M -Xmx1024M  
    -XX:ParallelGCThreads=4  -XX:+AggressiveHeap -XX:+UseParallelGC
    
    
    加入测试语句
    JOptionPane.showMessageDialog(null,"hello world!!!");
    
    
    
    
    
    
    
    
    服务端搭建  
    再将decompile目录中的server.TeamServer类复制一份到src目录中  
     
    打包有问题src META-INF  MANIFEST.MF 复制
    
      
    E:\hack\conn\CobaltStrike\cobaltstrike.auth
    E:\hack\conn\CobaltStrike\cobaltstrike.store 
    -Djavax.net.ssl.keyStorePassword=123456
    
    设置对应的VM option为 
    
    -XX:ParallelGCThreads=4 -Dcobaltstrike.server_port=50050 -Djavax.net.ssl.keyStore=D:\ALL\javaidea\cs_disassemably\lib\google.store -Djavax.net.ssl.keyStorePassword=google -server -XX:+AggressiveHeap -XX:+UseParallelGC  
     
     注意:其中google.store可以是自己生成的ssl证书  
     
     https://www.cnblogs.com/haidragon/p/16852315.html  
     https://github.com/jas502n/cs-agent  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    auth破解

    先定义一下 以后修改过的地方全会标记上
    //aming_change

    在这里插入图片描述

    采用全局搜索

    关键字 “cobaltstrike.auth”

    在这里插入图片描述

    硬编码修改
    byetes变量是密钥
    对sleeve修改有帮助

      protected String watermarkHash = "BeudtKgqnlm0Ruvf+VYxuw==";
       public Authorization() {
    
    
    
          try {
    
             this.watermark=100000;
    
             this.validto="forever";
    
             this.valid = true;
    
             final byte[] bytes = {-13, -114, -77, -47, -93, 53, -78, 82, -75, -117, -62, -84, -34, -127, -75, 66};
    
             common.MudgeSanity.systemDetail("valid to", "perpetual");
    
             common.MudgeSanity.systemDetail("id", String.valueOf(this.watermark));
    
             SleevedResource.Setup(bytes);
    
          }
    
          catch (Exception ex2) {
    
             MudgeSanity.logException("auth file parsing", ex2, false);
    
          }
    //aming_change
    
       }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    license 白嫖

    师傅用java agent注入的形式动态替换内存当中的license实现白嫖
    twi1ight jarcs4.3反编译

    idea安装目录下的plugins/java-decompiler/lib/java-decompiler.jar文件反编译

    拔掉暗桩

    暗桩导致进不去GUI界面
    跟System.exit 有直接关系 采用全局搜索

    从aggressor.Aggressor 开始看

    Dlgshow在这
    上面三个调用

         checkGUI(
         checkLicenseGUI(
         initializeStarter(
         ConnectDialog(
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    exit函数都注释掉

    跟进checkGUI()
    在这里插入图片描述

    跟进initializeStarter
    在这里插入图片描述
    跟进checkLicenseGUI
    在这里插入图片描述发现isValid()、isPerpetual()、isExpired()、isAlmostExpired()
    对授权是否有效、授权是否过期进行判断

    回到了参数 var0 -> new Authorization() 跳过
    继续 new ConnectDialog(B)
    在这里插入图片描述

    跟进initialize(
    在这里插入图片描述
    exit去掉了 启动

    初始环境效果

    G:\code\Saft_Code\CobaltStrike_debug\out\artifacts\CobaltStrike_debug_jar
    在这里插入图片描述

    -javaagent:命令行关键字

    在这里插入图片描述

    class 验证

    在这里插入图片描述
    返回true即可

    机器上线之后执行命令60秒自动退出

    在这里插入图片描述

     
    beacon/BeaconData中将shouldPad方法的值固定为false
    • 1
    • 2

    4个小时机器自动掉线

    在这里插入图片描述

    以下全刪除

    Beacon分析

    beacon payload的加载过程

    beacon loader

    静态分析

    直接看伪代码
    入口处很容易能够找到 main 函数的地址

    关注这个函数
    在这里插入图片描述
    401795 这个

    基于一些特征随机利用格式化字符串生成了一个字符串buffer,
    同时创建了一个新的线程
    在这里插入图片描述
    执行函数为sub_401685
    在这里插入图片描述

    进 sub_4015D0

    在这里插入图片描述

    以上面生成的buffer为名字创建了一个命名管道,

    然后进行判断,如果命名管道创建成功,

    ConnectNamedPipe函数将等待客户端连接到管道。

    如果成功连接到管道, 使用WriteFile函数将shellcode数据写入已连接的命名管道。

    如果写入成功,则更新指针lpBuffer和剩余要写入的字节数nNumberOfBytesToWrite。

    stageless Beacon 内存特征

    无阶段的 beacon

    使用 Process Hacker 分析 Beacon的特征
    选中的beacon.exe,之后弹出beacon.exe(4008)属性框,选择属性框中的“线程”,可以看到线程起始地址:beacon.exe+0x14b0
    
    • 1
    • 2

    在这里插入图片描述
    在这里插入图片描述
    单击选中的beacon.exe+0x14b0,查看线程 952 的堆栈的调用了SleepEx睡眠

    在这里插入图片描述

    内存段是rwx权限

    查看 beacon.exe 所有的内存,内存段很少有是rwx权限的,我们直接定位到rwx内存段
    之后,右键把内存导出到文件
    在这里插入图片描述
    用写字板形式打开beacon.exe.bin文件

    内存中有 beacon 字符串

    在这里插入图片描述

    内存中有 ReflectiveLoader 字符串

    在这里插入图片描述

    stageless Beacon https 生成分析

    cs如何进行构造payload

    选择payload

    aggressor.dialogs.WindowsExecutableStageDialog#dialogAction

    在这里插入图片描述

    点击保存

    来到aggressor.dialogs.WindowsExecutableStageDialog#dialogResult,
    主要有如下两个部分
    在这里插入图片描述

    ScListener var5 = ListenerUtils.getListener(this.client, var3);
    获取当前listener的名称,然后生成对应的ScListener对象
    this.stager = var5.export(this.client, var4);
    
    
    • 1
    • 2
    • 3
    • 4

    stageless beacon http通信协议 过程分析

    为了看cs 各个功能实现 以及具体的通信包结构以便自己实现beacon。

    rsa 公私钥
    序列化存储在.cobaltstrike.beacon_keys 里

    上线&心跳get请求

    beacon 上线第一个请求就是一个带有metadata 信息的get包
    然后服务端再返回一个没内容的响应包。
    在这里插入图片描述

    默认这个metadata 信息是用rsa 公钥加密放在cookie 里的,
    这个行为的在profile 文件的http-get.client.metadata 里定义。

    后续的心跳请求也是这个,

    如果服务端有命令要下发给beacon执行 就是通过心跳请求的响应包来传递。

    teamserver 处理请求

    teamserver 的NanoHTTPD -> run方法在获取到请求后传给WebServer.serve,

    最终请求信息传递给WebServer._serve 来处理请求信息。

    _serve 方法先检测User-Agent是否在黑名单里
    在就把blockedByUA 设置为true,

    然后又检查ua 是否在白名单里,
    如果有设置白名单并且没有匹配到的话就把allowedByUA 设置我false,
    在这里插入图片描述
    allowedByUA默认为true。

          boolean allowedByUA = true;
          String hook;
          if (this.allowedUAArray.length > 0) {
             allowedByUA = false;
             String[] arr$ = this.allowedUAArray;
             len$ = arr$.length;
    
             for(int i$ = 0; i$ < len$; ++i$) {
                hook = arr$[i$];
                if (hook.trim().length() > 0 && CSUtils.matchesSimpleGeneric(useragent, hook.trim())) {
                   allowedByUA = true;
                }
             }
          }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    只有当满足 allowedByUA && !blockedByUA 条件时才继续执行函数,
    否则就在控制台提示然后返回404
    在这里插入图片描述

    黑白名单的ua 可以在profile的http-config 中配置,
    curl/lynx/wget* 是默认黑名单

    下一步就是判断请求方法是不是OPTIONS ,
    是就返回200 和允许的方法
    在这里插入图片描述再往下就是之前爆出的路径不规范泄露stager信息漏洞的地方,

    这里看this.hooks里的内容如果直接传入一个类似GET stager HTTP/1.1,
    这样的请求头就会泄露stager信息
    在这里插入图片描述
    在这里插入图片描述

    Beacon C2Profile

    客户端分析

    exportBeaconStage 方法

    把 settings 转 byte 数组,然后混淆后 Patch 的
    在这里插入图片描述settings 的设置,可以很明显的发现四个方法 addShort、addInt、addString、addData
    在这里插入图片描述

    Beacon 端分析

    实际执行的 Beacon 是由一个 Loader 加载执行
    实际运行的时候,运行的是 Loader

    真正核心的 beacon.dll 在 DLLMain 中干了什么事

    当 fdwReason 为 1 时,实际执行的是解析 C2Profile 的操作
    当 fdwReason 为 4 时,才是真正的功能执行

    展示图

    所以 客户端 Patch 到 Beacon 中的 C2Profile
    与 Beacon 在运行时所使用的 C2Profile 长的并不是一样的
    客户端
    在这里插入图片描述
    beacon
    在这里插入图片描述

    Beacon 结果回传流程分析

    Beacon 在接受完命令并执行后,会将数据加密回传给 C2
    C2进行解析后,并根据类型对结果的格式进行处理后,再回传给客户端

    Beacon 接收与处理

    在通信相关函数上下断
    HttpSendRequest 发送任务
    InternetReadFile 接收任务

    结果回传

    参考文章

    魔改CobaltStrike :上线就跟回家一样

    https://www.52pojie.cn/thread-1401826-1-1.html

    魔改CobaltStrike:免杀就像便秘一样

    https://www.52pojie.cn/thread-1396671-1-1.html

    [原创]魔改CobaltStrike:协议全剖析

    https://bbs.kanxue.com/thread-267208.htm

    CobaltStrike魔改与增强

    https://www.bilibili.com/read/cv14238932/

    Cobalt Strike 定制化开发(部分bug修复)完整版

    https://www.modb.pro/db/532313

    CobaltStrike二次开发

    https://cloud.tencent.com/developer/article/1808082

    CobaltStrike魔改与增强

    http://www.taodudu.cc/news/show-4636865.html?action=onClick

    CobaltStrike二次开发环境准备以及免杀

    https://www.yii666.com/blog/355849.html

    CS二开记录

    https://mp.weixin.qq.com/s/frssnIfHKklT2wgsFCNN9w
    CobaltStrike魔改与增强
    http://www.taodudu.cc/news/show-4636865.html?action=onClick

    cobaltstrike4.5 stageless beacon 通信分析

    https://mp.weixin.qq.com/s/xhRvAEFftmNEW97uW5BNOQ

    http whoami
    https://github.com/l3anma/cobaltstrike4.5_http_dec

    cobalt strike https stageless 生成分析
    https://www.cnblogs.com/zpchcbd/p/16879313.html
    cobalt strike https stage 生成分析
    https://www.cnblogs.com/zpchcbd/p/16870856.html

    Cobalt Strike 的 Beacon 使用介绍以及 Profile 文件修改Beacon内存教程
    https://mp.weixin.qq.com/s/ZibHR_ed9kod5VQWh9GNBg

    CobaltStrike4.5 分析总结
    https://mp.weixin.qq.com/s/K47FXTMEWfB_474aHAGU5g

    CobaltStrike 4.5 二开 - FreeBuf网络安全行业门户
    https://www.freebuf.com/sectool/351507.html

    CobaltStrike二次开发环境准备以及免杀_cobaltstrike免杀-CSDN博客
    https://blog.csdn.net/r250414958/article/details/124641185

    Beacon C2Profile 解析
    https://mp.weixin.qq.com/s/KLAG_8jafwEurVzk7Qz26A

    CS DNS beacon二次开发指北
    https://mp.weixin.qq.com/s/PpVVUh7_IhYRqttPL1gXEw

    Beacon 结果回传流程分析
    https://mp.weixin.qq.com/s/7GDcoKYNMx2Xy3caHHzbYw

    Beacon sleep_mask 分析
    https://mp.weixin.qq.com/s?__biz=MzkxMTMxMjI2OQ==&mid=2247484016&idx=1&sn=c788a9a63f3db2f2e7a11f3c82534281&chksm=c11f5692f668df84677a4fe2bff5ea3104f9e349533d0e70815c246edf89c53cd27922cdef43&scene=21#wechat_redirect

    透视CobaltStrike(一)——PE类Beacon分析
    https://mp.weixin.qq.com/s/SqXIal-7hH8_fEL05Jzd2A

    魔改CobaltStrike:命由己造(上)
    https://bbs.pediy.com/thread-267848.htm

    CobaltStrike Beacon生成原理分析
    https://mp.weixin.qq.com/s/9Nluo4luG8F7QwXYGxZJoA

    CobaltStrike分析-beacon 解析
    https://mp.weixin.qq.com/s/NZkVwRC2VB9_3-Om9rVVCg

  • 相关阅读:
    opencv相机校准和3D重建代码部分
    小波神经网络的基本原理,小波神经网络算法原理
    【Linux】信号(1)认识、记录和产生信号
    双十二哪些数码好物值得入手?盘点双十二最值得入手的数码好物
    uniapp web-view调整修改高度设置
    (自学)黑客技术——网络安全
    ELK Kibana搜索框模糊搜索包含不包含
    技术派Spring事件监听机制及原理
    JDSU故障测试仪维修OTDR光时域反射仪维修MTS2000
    第三方在线地图源有哪些?
  • 原文地址:https://blog.csdn.net/qq_33608000/article/details/133697823