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

这篇具有很好参考价值的文章主要介绍了红队专题-Cobalt strike4.5二次开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

cobaltstrike二次开发,python,pycharm,开发语言

招募六边形战士队员

一起学习 代码审计、安全开发、web攻防、逆向等。。。
私信联系
cobaltstrike二次开发,python,pycharm,开发语言

IDEA 自动换行

File->【Settings】
*.md; *.txt; *.rst; .adoc;.java
cobaltstrike二次开发,python,pycharm,开发语言

原版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源代码都放进去 

cobaltstrike二次开发,python,pycharm,开发语言


lib目录将的cobaltstrike.jar(这个jar是未反编译的jar包),放进去 
cobaltstrike.auth 也是

将decompile/aggressor.Aggressor.java 复制到src/aggressor.Aggressor.java
右键 make Directory as  Source Root

cobaltstrike二次开发,python,pycharm,开发语言
cobaltstrike二次开发,python,pycharm,开发语言


并且将该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  

auth破解

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

cobaltstrike二次开发,python,pycharm,开发语言

采用全局搜索

关键字 “cobaltstrike.auth”

cobaltstrike二次开发,python,pycharm,开发语言

硬编码修改
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

   }

拔掉暗桩

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

从aggressor.Aggressor 开始看

Dlgshow在这
上面三个调用

     checkGUI(
     checkLicenseGUI(
     initializeStarter(
     ConnectDialog(

cobaltstrike二次开发,python,pycharm,开发语言

exit函数都注释掉

跟进checkGUI()
cobaltstrike二次开发,python,pycharm,开发语言

跟进initializeStarter
cobaltstrike二次开发,python,pycharm,开发语言
跟进checkLicenseGUI
cobaltstrike二次开发,python,pycharm,开发语言发现isValid()、isPerpetual()、isExpired()、isAlmostExpired()
对授权是否有效、授权是否过期进行判断

回到了参数 var0 -> new Authorization() 跳过
继续 new ConnectDialog(B)
cobaltstrike二次开发,python,pycharm,开发语言

跟进initialize(
cobaltstrike二次开发,python,pycharm,开发语言
exit去掉了 启动

初始环境效果

G:\code\Saft_Code\CobaltStrike_debug\out\artifacts\CobaltStrike_debug_jar
cobaltstrike二次开发,python,pycharm,开发语言

-javaagent:命令行关键字

cobaltstrike二次开发,python,pycharm,开发语言

class 验证

cobaltstrike二次开发,python,pycharm,开发语言
返回true即可

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

cobaltstrike二次开发,python,pycharm,开发语言

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

4个小时机器自动掉线

cobaltstrike二次开发,python,pycharm,开发语言

以下全刪除

Beacon分析

beacon payload的加载过程

beacon loader

静态分析

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

关注这个函数
cobaltstrike二次开发,python,pycharm,开发语言
401795 这个

基于一些特征随机利用格式化字符串生成了一个字符串buffer,
同时创建了一个新的线程
cobaltstrike二次开发,python,pycharm,开发语言
执行函数为sub_401685
cobaltstrike二次开发,python,pycharm,开发语言

进 sub_4015D0

cobaltstrike二次开发,python,pycharm,开发语言

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

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

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

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

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

stageless Beacon 内存特征

无阶段的 beacon

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

cobaltstrike二次开发,python,pycharm,开发语言
cobaltstrike二次开发,python,pycharm,开发语言
单击选中的beacon.exe+0x14b0,查看线程 952 的堆栈的调用了SleepEx睡眠

cobaltstrike二次开发,python,pycharm,开发语言

内存段是rwx权限

查看 beacon.exe 所有的内存,内存段很少有是rwx权限的,我们直接定位到rwx内存段
之后,右键把内存导出到文件
cobaltstrike二次开发,python,pycharm,开发语言
用写字板形式打开beacon.exe.bin文件

内存中有 beacon 字符串

cobaltstrike二次开发,python,pycharm,开发语言

内存中有 ReflectiveLoader 字符串

cobaltstrike二次开发,python,pycharm,开发语言

stageless Beacon https 生成分析

cs如何进行构造payload

选择payload

aggressor.dialogs.WindowsExecutableStageDialog#dialogAction

cobaltstrike二次开发,python,pycharm,开发语言

点击保存

来到aggressor.dialogs.WindowsExecutableStageDialog#dialogResult,
主要有如下两个部分
cobaltstrike二次开发,python,pycharm,开发语言

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

stageless beacon http通信协议 过程分析

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

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

上线&心跳get请求

beacon 上线第一个请求就是一个带有metadata 信息的get包
然后服务端再返回一个没内容的响应包。
cobaltstrike二次开发,python,pycharm,开发语言

默认这个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,
cobaltstrike二次开发,python,pycharm,开发语言
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;
            }
         }
      }

只有当满足 allowedByUA && !blockedByUA 条件时才继续执行函数,
否则就在控制台提示然后返回404
cobaltstrike二次开发,python,pycharm,开发语言

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

下一步就是判断请求方法是不是OPTIONS ,
是就返回200 和允许的方法
cobaltstrike二次开发,python,pycharm,开发语言再往下就是之前爆出的路径不规范泄露stager信息漏洞的地方,

这里看this.hooks里的内容如果直接传入一个类似GET stager HTTP/1.1,
这样的请求头就会泄露stager信息
cobaltstrike二次开发,python,pycharm,开发语言
cobaltstrike二次开发,python,pycharm,开发语言

Beacon C2Profile

客户端分析

exportBeaconStage 方法

把 settings 转 byte 数组,然后混淆后 Patch 的
cobaltstrike二次开发,python,pycharm,开发语言settings 的设置,可以很明显的发现四个方法 addShort、addInt、addString、addData
cobaltstrike二次开发,python,pycharm,开发语言

Beacon 端分析

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

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

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

展示图

所以 客户端 Patch 到 Beacon 中的 C2Profile
与 Beacon 在运行时所使用的 C2Profile 长的并不是一样的
客户端
cobaltstrike二次开发,python,pycharm,开发语言
beacon
cobaltstrike二次开发,python,pycharm,开发语言

Beacon 结果回传流程分析

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

Beacon 接收与处理

在通信相关函数上下断
HttpSendRequest 发送任务
InternetReadFile 接收任务文章来源地址https://www.toymoban.com/news/detail-727090.html

结果回传

到了这里,关于红队专题-Cobalt strike4.5二次开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Cobalt Strike之反向上线操作

    Cobalt Strike 使用 GUI 框架 SWING(一种java GUI的库)开发,攻击者可通过CS木马在 beacon 元数据中注入恶意 HTML 标签,使得Cobalt Strike对其进行解析并且加载恶意代码(类似XSS攻击),从而在目标系统上执行任意代码。 攻击者需要通过CS木马在 beacon 元数据中注入恶意payload,恰好F

    2024年02月05日
    浏览(42)
  • Cobalt Strike 连接启动教程(1)

    最免杀,怕被360之类的查杀,就用带s的  一次性 第八步:右键---目标----文件管理----能进入运行了病毒牧马diannao的系统了     第十步:对方桌面任何东西点击不了,点击下面带帽子的黑色小人, 就可以操作对方电nao   点击目标-----------端口扫描---------弹出扫描框(这个扫描

    2024年02月06日
    浏览(42)
  • Cobalt Strike(cs)下载及使用

    1、启动服务 2、客户端连接服务,可以是linuxwindows 3.新建监听器 4、生成反弹shell 5、在目标机器上执行生成的exe文件,靶机可以ping同攻击机,关掉靶机杀毒

    2024年02月13日
    浏览(35)
  • Cobalt Strike第五篇导入插件

    CobaltStrike有两种加载插件的方法,一种是在客户端加载,一种是在服务端加载。在客户端加载,当客户端没连接上服务端后,该插件即不会被加载。所以有时候需要在服务端加载某些插件。 一、插件下载 二、客户端加载 点击 CobaltStrike– Script Manager 点击 Load 加载插件,加载

    2024年02月16日
    浏览(50)
  • Cobalt Strike工具安装与基础使用

      Cobalt Strike是一款超级好用的渗透测试工具,拥有多种协议主机上线方式,集成了提权,凭据导出,端口转发,socket代理,office攻击,文件捆绑,钓鱼等多种功能。同时,Cobalt Strike还可以调用Mimikatz等其他知名工具,因此广受技术大佬的喜爱。   同时Cobalt Strike集成了端

    2024年02月15日
    浏览(39)
  • 【渗透测试】利用Cobalt Strike渗透Windows

    在kali中使用Cobalt Strike对Windows进行渗透 kali(服务端):192.168.175.129 win11(攻击机):192.168.175.128 win11(靶机):192.168.175.137 将压缩包解压 进入解压后的Server文件夹,赋予文件执行权限 192.168.175.129为Kali机器的IP, 1234 为团队接入的口令,后面需要用到 在Win11攻击机中将Coba

    2024年02月16日
    浏览(44)
  • Cobalt Strike 连接启动教程,制作图片?(2)

    安装工具:      

    2024年02月06日
    浏览(41)
  • 【渗透测试】Cobalt Strike制作钓鱼邮件渗透Windows

    在kali中使用Cobalt Strike制作钓鱼邮件,对Windows进行渗透 kali(服务端):192.168.175.129 win11(攻击机):192.168.175.128 win11(靶机):192.168.175.137 将压缩包解压 若要解压到指定路径,先新建文件夹,使用以下命令 进入解压后的Server文件夹,赋予文件执行权限 192.168.175.129为Kali机器

    2024年02月16日
    浏览(54)
  • 内网安全:横向传递攻击( RDP || Cobalt Strike )

    横向移动就是在拿下对方一台主机后,以拿下的那台主机作为跳板,对内网的其他主机再进行后面渗透,利用既有的资源尝试获取更多的凭据、更高的权限,一步一步拿下更多的主机,进而达到控制整个内网、获取到最高权限、发动高级持续性威胁攻击的目的.( 传递攻击主

    2024年02月10日
    浏览(42)
  • 保姆级教学!小白也会的cobalt strike搭建

    目录 简介 环境及工具 搭建部署 1.端口配置 2.远程连接服务器 3.JAVA环境安装 4.上传cs工具压缩包 5.服务器上解压cs工具压缩包 6.启动CS服务端 7.客户端连接 cobalt strike(简称CS)是一款团队作战渗透测试神器,分为客户端及服务端,一个服务端可以对应多个客户端,一个客户端

    2023年04月18日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包