当前位置: 首页 > news >正文

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

红队专题

  • 招募六边形战士队员
  • IDEA 自动换行
  • 原版CS反编译破解
    • jar包反编译
    • 拔掉暗桩
    • 初始环境效果
  • stageless beacon http通信协议 过程分析
    • 上线&心跳get请求
    • teamserver 处理请求
  • 参考链接

招募六边形战士队员

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

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 文件,这个是空文件,是为了之后放反编译后的cobaltstrikejava -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源代码都放进去 

在这里插入图片描述


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

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


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

拔掉暗桩

采用全局搜索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 fileCommonUtils.print_error 
Requirements.checkGUI()->common.requirements
//aming_changebeacon/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->starter2dialogs->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 Msr010527browsers.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。

      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

相关文章:

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

红队专题 招募六边形战士队员IDEA 自动换行原版CS反编译破解jar包反编译拔掉暗桩初始环境效果 stageless beacon http通信协议 过程分析上线&心跳get请求teamserver 处理请求 参考链接 招募六边形战士队员 一起学习 代码审计、安全开发、web攻防、逆向等。。。 私信联系 …...

Java数据结构之Deque(双端队列)

一、Queue和Deque异同介绍 我们知道&#xff0c;Queue是队列&#xff0c;只能一头进&#xff0c;另一头出。 如果把条件放松一下&#xff0c;允许两头都进&#xff0c;两头都出&#xff0c;这种队列叫双端队列&#xff08;Double Ended Queue&#xff09;&#xff0c;学名Deq…...

flink以增量+全量的方式更新广播状态

背景 flink在实现本地内存和db同步配置表信息时&#xff0c;想要做到类似于增量(保证实时性) 全量(保证和DB数据一致)的效果&#xff0c;那么我们如何通过flink的广播状态外部定时器定时全量同步的方式来实现呢&#xff1f; 实现增量全量的效果 package wikiedits.schedule…...

Java:org.apache.commons.io包的工具类:IOUtils、FileUtils、FilenameUtils

文档 https://commons.apache.org/proper/commons-io/https://central.sonatype.com/artifact/commons-io/commons-io/2.14.0/jar 工具类 IOUtils io工具类FileUtils 文件操作工具类FilenameUtils 文件名工具类 依赖 <dependency><groupId>commons-io</gro…...

【JavaEE】文件操作

文章目录 前言什么是文件树型结构组织和目录文件路径文件类型文件权限Java中的文件操作File 类的常见属性File 类常见构造方法File 类常用方法 前言 文件是我们日常生活中使用非常广泛的&#xff0c;我们使用任何一个程序都离不开文件操作&#xff0c;这个文件不仅仅指平时可以…...

高精度电流源的应用领域有哪些

高精度电流源是一种能够提供稳定、准确、可控的电流输出的仪器设备&#xff0c;广泛应用于多个领域。以下是一些高精度电流源的应用领域。 科学研究&#xff1a;在物理学、化学、材料科学等领域中&#xff0c;需要进行精确的电流实验和测试。高精度电流源可以提供稳定的电流输出…...

多线程 - 线程池

线程池 相关的背景知识 线程池存在的意义: 使用进程来实现并发编程,效率太低了,任务太重了,为了提高效率,此时就引入了线程,线程也叫做“轻量级进程”,创建线程比创建进程更高效;销毁线程比销毁进程更高效;调度线程比调度进程更高效…此时,使用多线程就可以在很多时候代替进程…...

vue3 setup中defineEmits与defineProps的使用案例

目录 一、defineEmits的使用 二、 defineProps的使用 总结 一、defineEmits的使用 使用说明 1、在子组件中调用defineEmits并定义要发射给父组件的方法 const emits defineEmits([foldChange]) 2、使用defineEmits会返回一个方法&#xff0c;使用一个变量emits(变量名随意…...

Vs - Qt - 下拉窗口示例

下列代码定义了一个窗口&#xff0c;窗口采用竖直布局&#xff1a;一个按钮及一个label。按下按钮时候&#xff0c;窗口扩张&#xff0c;显示label控件。再次按下按钮时&#xff0c;窗口收缩&#xff0c;隐藏label控件。 详细代码如下&#xff1a; #include <QApplication&g…...

深圳自贸区的形成与发展

深圳自贸区的形成与发展源于中国政府推出的自贸试验区政策。自贸试验区是指在特定区域内&#xff0c;允许实行特殊的行政管理措施和贸易政策&#xff0c;以促进贸易自由化、投资便利化和经济转型升级。 深圳自贸区成立于2015年4月以来&#xff0c;主要着眼于优化区域布局、提高…...

机器人中的数值优化(二十一)—— 伴随灵敏度分析、线性方程组求解器的分类和特点、优化软件

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…...

BACnet /IP转MQTT网关

在工业自动化和楼宇自动化领域中&#xff0c;Modbus、MQTT和BACnet/IP是三种常用的通信协议。Modbus是一种串行通信协议&#xff0c;常用于连接工业电子设备&#xff1b;MQTT是一种基于发布/订阅模式的轻量级通信协议&#xff0c;适用于远程监测和控制系统&#xff1b;BACnet/I…...

Web API 基础 (Web Workers API)

Web Workers API 1、指南 1.1 使用Web Workers Web Workers是一种让Web内容在后台线程中运行脚本的简单方法。工作线程可以在不干扰用户界面的情况下执行任务。此外&#xff0c;它们还可以使用XMLHttpRequest(尽管responseXML和channel属性总是为空)或fetch(没有此类限制)执…...

如何看待程序员不写注释?

程序员对代码注释可以说是又爱又恨又双标……你是怎么看待程序员不写注释这一事件的呢&#xff1f; 对于程序员来说&#xff0c;注释是一种非常重要的实践&#xff0c;可以帮助他们自己和其他人更好地理解和维护代码。以下是一些关于注释的观点&#xff1a; 维护代码的重要性&a…...

2.6 方法

思维导图&#xff1a; 2.6.1 什么是方法 ### 2.6.1 什么是方法 **定义**: - 方法就是一段可以重复调用的代码&#xff0c;使得程序的可读性、可维护性都得以提高。 **示例**: - 假设有一个游戏中需要反复发射炮弹。而发射炮弹的代码有100行。为了避免在程序中多次写下这100…...

【排序算法】插入排序

文章目录 一&#xff1a;基本概念1.1 介绍1.2 原理1.3 插入排序法思想 二&#xff1a;代码实现2.1 源码2.2 执行结果2.3 测试八万条数据 三&#xff1a;算法分析3.1 时间复杂度3.2 空间复杂度3.3 稳定性 一&#xff1a;基本概念 1.1 介绍 插入式排序属于内部排序法&#xff0…...

Gnuradio+AM解调

1. https://wiki.gnuradio.org/index.php/PLL_Carrier_Tracking 2. https://wiki.gnuradio.org/index.php?titleComplex_to_Mag#Example_Flowgraph...

解决java.io.IOException: Broken pipe的报错

问题说明&#xff1a; 订单服务&#xff0c;查询预售但是出现Broken pipe&#xff1b; 测试版是正常的&#xff0c;正式版报错 解决方案 1、延长客户端超时时间 // 查询预售单列表 export function listPreOrder(query) {return request({url: /order/presale/list,method:…...

微信小程序--》从模块小程序项目案例23.10.09

配置导航栏 导航栏是小程序的门户&#xff0c;用户进来第一眼看到的便是导航栏&#xff0c;其起着对当前小程序主题的概括。而我们 新建的小程序 时&#xff0c;第一步变开始配置导航栏。如下&#xff1a; 配置tabBar 因为配置tabBar需要借助字体图标&#xff0c;我这里平常喜…...

爱尔眼科角膜塑形镜验配超百万,全力做好“角塑镜把关人”

你知道吗?过去的2022年&#xff0c;我国儿童青少年总体近视率为53.6%&#xff0c;其中6岁儿童为14.5%&#xff0c;小学生为36%&#xff0c;初中生为71.6%&#xff0c;高中生为81%①。儿童青少年眼健康问题俨然成为全社会关心的热点与痛点&#xff0c;牵动着每一个人的神经。 好…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...