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

红队专题

招募六边形战士队员

一起学习 代码审计、安全开发、web攻防、逆向等。。。

私信联系

IDEA 自动换行

File->【Settings】

*.md; *.txt; *.rst; .adoc; .java

原版CS反编译破解

jar包反编译

ruby 复制代码
 
CobaltStrike二次开发环境初探

CobaltStrike 4.5原版 2022年5月1日 发布 + 破解及汉化加载

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源代码都放进去 
ruby 复制代码
lib目录将的cobaltstrike.jar(这个jar是未反编译的jar包),放进去 
cobaltstrike.auth 也是

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


ruby 复制代码
并且将该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!!!");

参考资料
https://www.modb.pro/db/532313
https://cloud.tencent.com/developer/article/1808082






服务端搭建  
再将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  

拔掉暗桩

ruby 复制代码
采用全局搜索


The Cobalt Strike Team Server process cannot be started with a javaagent
The Cobalt Strike Client process cannot be started with a javaagent.
[-] Your authorization file is not valid: pre-4.0 authorization file. Run update to get new file


CommonUtils.print_error 
Requirements.checkGUI()->common.requirements
//aming_change

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

common/Helper增加.class判断public final boolean startHelper(Class var1)

 

断点修改
common->class Authorization->
License-> checkLicenseGUI->JOptionPane.showMessageDialog ->showMessageDialog ->showOptionDialog ->dialog.show()


super.initializeStarter->common.starter->starter2

 
dialogs->public ConnectDialog(MultiFrame var1)


JFrame var3 = DialogUtils.dialog("Connect", 640, 480);

A Cobalt Strike team server is not available onthe specified host and port. You must start aCobalt Strike team server first
G:\code\Saft_Code\CobaltStrike_debug\out\artifacts\CobaltStrike_debug_jar\teamserver.bat 192.168.31.19 Msr010527

browsers.public class Connect->public void dialogAction->
common->TeamSocket->public class TeamQueue->

this.tqueue.call("aggressor.authenticate"


var2.dialogAction(var1x, DialogManager.this.options);

dialogs.ConnectDialog->
DialogManager.B((JComponent)var1x.getSource(), true)


   private static void B(final JComponent var0, final boolean var1) {
      CommonUtils.runSafe(new Runnable() {
         public void run() {
            var0.setEnabled(var1);
         }
      });
   }


commonUtils-> public static void runSafe

调试中断
[!] Trapped java.net.SocketTimeoutException during client (192.168.31.19) read [TeamQueue Reader]: Read timed out



参考文章
    
https://www.yii666.com/blog/355849.html
http://www.taodudu.cc/news/show-4636865.html?action=onClick

初始环境效果

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。

java 复制代码
      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

黑白名单的ua 可以在profile的http-config 中配置,

curl/lynx/wget* 是默认黑名单

下一步就是判断请求方法是不是OPTIONS ,

是就返回200 和允许的方法
再往下就是之前爆出的路径不规范泄露stager信息漏洞的地方,

这里看this.hooks里的内容如果直接传入一个类似GET stager HTTP/1.1,

这样的请求头就会泄露stager信息

参考链接

cobaltstrike4.5 stageless beacon 通信分析

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

http whoami

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

相关推荐
liu_chunhai13 分钟前
设计模式(3)builder
java·开发语言·设计模式
Mr.D学长18 分钟前
毕业设计 深度学习社交距离检测系统(源码+论文)
python·毕业设计·毕设
姜学迁21 分钟前
Rust-枚举
开发语言·后端·rust
wdxylb22 分钟前
解决Python使用Selenium 时遇到网页 <body> 划不动的问题
python
冷白白23 分钟前
【C++】C++对象初探及友元
c语言·开发语言·c++·算法
凌云行者27 分钟前
rust的迭代器方法——collect
开发语言·rust
代码骑士29 分钟前
【一起学NLP】Chapter3-使用神经网络解决问题
python·神经网络·自然语言处理
It'sMyGo30 分钟前
Javascript数组研究09_Array.prototype[Symbol.unscopables]
开发语言·javascript·原型模式
睡觉然后上课41 分钟前
c基础面试题
c语言·开发语言·c++·面试
qing_0406031 小时前
C++——继承
开发语言·c++·继承