某C2鸡肋漏洞分析:你的CS安全吗?

CobaltStrike是一个知名的红队命令与控制框架,采用Beacon <-> TeamServer <-> Client架构。TeamServer存在受限路径穿越写文件与反序列化漏洞,可以被认证后客户端恶意利用。Client存在反序列化漏洞,可以被RogueCS攻击。

山寨威胁建模

由于这个软件的特殊性,我们需要想想什么才是漏洞:

  1. 直接攻击TeamServer暴露的服务

  2. 通过Beacon攻击TeamServer

  3. 通过Client攻击TeamServer

  4. 通过TeamServer攻击Client

  • TeamServer控制Beacon是功能,任何所谓TeamServer攻击Beacon的操作都不能算漏洞

可以看出TeamServer是核心,先从它下手。

历史漏洞

  • in-the-wild

利用TeamServer从Beacon下载文件时,会将Beacon可控数据中的IP字段作为目录的特点,实现路径穿越写计划任务RCE。

  • CVE-2021-36798

利用TeamServer从Beacon加载截图和键盘记录时,会根据Beacon可控数据中的字节大小申请内存的特点,实现内存耗尽DoS。

  • CVE-2022-23317

猜测是为了兼容proxy的功能(路径为http://开头),没有对URL路径做严谨的校验。动态调试可以看出这会绕过profile相关配置,直接拿到公钥等数据:

图片

虚假的DoS

BeaconC2.process_beacon_data中存在一处利用条件比较苛刻的DoS。

...
int var4 = var3.readInt();
...
if (var4 > var3.available()) {
    return false;
}
...
byte[] var5 = new byte[var4];

受限路径穿越

图片

用来防止路径穿越的核心是CommonUtils.SafeFile方法,判断解析前后的路径是否还以限定前缀开头。这其实可以让我们向上穿越一级并得到前缀开头的文件对象:

图片

  •  CVE-2022-23457就是另一个例子

ManageUser.process为例,Client可以通过Host File功能上传文件到TeamServer并映射至Web服务,这会先发出一个armitage.upload进行预处理,随后由armitage.append上传文件数据。

图片

这里Client与TeamServer基于序列化通过socket通信,SafeFile的二参var1.arg(0)客户端可控,在UploadFile.result拼接上前缀就可以实现受限路径穿越写文件。然而这并没有什么卵用

this.conn.call("armitage.append", CommonUtils.args(this.file.getName()
|
V
this.conn.call("armitage.append", CommonUtils.args("../uploads"+this.file.getName()

图片

想到zip解压释放软链接那种套路,File确实可以透过软链接写入指向文件中,但这里似乎没法实现直接将用于路径穿越的软链接本身存进去。

反序列化

图片

反序列化核心是TeamSocket.readObject方法,实际使用的ObjectInputStream.readUnshared。它在ManageUser.run中被PostAuthentication.clientAuthenticated通过多线程拉起。

图片

client来自SecureServerSocket.acceptAndAuthenticate中接收的客户端数据,预检密码使用readUnsignedByte读入,在密码比对正确时会进入上述反序列化流程。

图片

在客户端Connect.dialogAction发起连接时可以向TeamServer传输序列化对象,如果服务端存在gadgets环境就可被恶意利用。

this.tqueue.call("aggressor.authenticate", CommonUtils.args(var3, var6, Aggressor.VERSION), this);
|
V
Object payload = getObject() // URLDNS, 7u21, ...
this.tqueue.call("aggressor.authenticate", CommonUtils.args(var3, var6, payload), this)
  • 看代码流程感觉作者是考虑到了的,所以将反序列化放到了认证后

随后ManageUser.process会将登录成功/失败的消息序列化写回客户端,我们可以把SecureServerSocket.authenticate改为任何密码都校验成功(欺骗客户端通过密码预检),再写回恶意序列化对象(成为RogueCS),如果客户端存在gadgets环境就可被利用。

...
if (!this.authenticated && "aggressor.authenticate".equals(var1.getCall()) && var1.size() == 3) {
...
    Object payload = getObject() // URLDNS, 7u21, ...
    this.client.writeObject(var1.reply(payload))
...

利用条件

Client攻击TeamServer的话,需要知道服务端的密码(比如通过泄漏/反制得到HOME目录下.aggressor.prop配置文件),而通过TeamServer则可以攻击任何前来连接的Client。

危害大小取决于运行环境中gadgets的能力,我目前还没在CS内置的lib中找到有实质危害的gadgets。对于原生JRE环境而言,可以通过DeserializationBomb造成CPU型DoS:

Set<Object> root = new HashSet<>();
Set<Object> s1 = root;
Set<Object> s2 = new HashSet<>();
for (int i = 0; i < 100; i++) {
    Set<Object> t1 = new HashSet<>();
    Set<Object> t2 = new HashSet<>();
    t1.add("foo"); // make it not equal to t2
    s1.add(t1);
    s1.add(t2);
    s2.add(t1);
    s2.add(t2);
    s1 = t1;
    s2 = t2;
}

图片

这个与之前OpenSSL的DoS效果类似,多核环境只会影响单核。相关上下文大都是局部变量,也不太可能通过反序列化造成内存型DoS。所以一般也就能打个DNS自嗨,但如果以前调试漏洞在jre/lib/ext之类的目录引入过危险依赖,或者有大聪明用了7u21就会导致RCE:

图片

CS内置了commons-iosleep等jar包,找到链也不是完全没有可能,或者找到一种可控方式从当前目录加载类,就能结合受限路径穿越变成RCE。万一山鸡变凤凰了呢(doge

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/332448.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch各种损失函数解析:深度学习模型优化的关键(2)

目录 详解pytorch中各种Loss functions mse_loss 用途 用法 使用技巧 注意事项 参数 数学理论公式 代码演示 margin_ranking_loss 用途 用法 使用技巧 注意事项 参数 数学理论公式 代码演示 multilabel_margin_loss 用途 用法 使用技巧 注意事项 参数 …

【BERT】详解

BERT 简介 BERT 是谷歌在 2018 年时提出的一种基于 Transformer 的双向编码器的表示学习模型&#xff0c;它在多个 NLP 任务上刷新了记录。它利用了大量的无标注文本进行预训练&#xff0c;预训练任务有掩码语言模型和下一句预测&#xff0c;掩码语言模型指的是随机地替换文本中…

红外遥控,按键事件

问&#xff1a;android tv的遥控功能是如何实现的 答&#xff1a; Android TV 的遥控功能是通过红外遥控器或蓝牙遥控器来实现的。下面分别介绍这两种遥控器的工作原理&#xff1a; 红外遥控器&#xff1a; 红外遥控器是最常见的 Android TV 遥控器类型之一。 红外遥控器通…

Electron中苹果支付 Apple Pay inAppPurchase 内购支付

正在开发中&#xff0c;开发好了&#xff0c;写一个完整详细的过程&#xff0c;保证无脑集成即可 一、先创建一个App 一般情况下&#xff0c;在你看这篇文章的时候&#xff0c;说明你已经开发的app差不多了。 但是要上架app到Mac App Store&#xff0c;则要在appstoreconnect…

ROS第 9 课 编写简单的服务端 Server

文章目录 第 9 课 编写简单的服务端 Server1.创建服务器代码2.运行服务器节点 第 9 课 编写简单的服务端 Server 1.创建服务器代码 注意&#xff1a;在创建服务器代码之前&#xff0c;需要先创建工作空间和功能包&#xff0c;具体操作过程可前往目录“第4课 创建工作空间与功能…

14 STM32 - IIC (时序图+软件源码)

14.1 IIC简介 IIC&#xff08;Inter-Integrated Circuit&#xff09;&#xff0c;中文集成电路总线&#xff0c;是一种串行通信总线&#xff0c;使用多主从架构。I2C串行总线一般有两根信号线&#xff0c;一根是双向的数据线SDA&#xff0c;另一根是时钟线SCL。所有接到I2C总线…

VUE--组件的生命周期及其基本应用

VUE的生命周期 上图是实例生命周期的图表&#xff0c;需要注意以下几个重要时期&#xff1a; 创建期&#xff1a;beforeCreated、created 挂载期&#xff1a;beforeMount、mounted 更新期&#xff1a;beforeUpdate、updated 销毁期&#xff1a;beforeUnmount、unmounted 生命周…

云原生演进中的AI算力高效使用

0 1 云原生技术的普及与发展 云原生技术是一种基于容器技术的轻量级、高可用的应用架构&#xff0c;具有弹性扩展、快速部署、统一管理等特点。随着企业对敏捷开发和快速迭代的需求不断增加&#xff0c;云原生技术的普及与发展已成为不可逆转的趋势。 图1. 云原生技术发展之路…

软件测试阶段简介_单元测试、集成测试、配置项测试、系统测试

文章目录 前言一、软件测试“V”模型二、单元测试三、集成测试四、配置项测试五、系统测试总结 前言 一般来说&#xff0c;按照软件的研制阶段划分&#xff0c;软件测试可分为单元测试、集成测试、配置项测试、系统测试等。本文将对上述各测试阶段进行逐一介绍。 一、软件测试…

元宇宙:智慧城市建设的未来引擎与价值之源

在21世纪的技术大潮中&#xff0c;元宇宙的出现无疑是一场革命&#xff0c;其独特的概念与价值已经引发了全球范围内的关注。 作为新兴科技的前沿&#xff0c;元宇宙为智慧城市建设带来了无限的可能性和价值&#xff0c;有望成为未来城市发展的核心动力。 元宇宙&#xff0c;这…

【RPC】动态代理:面向接口编程,屏蔽RPC处理流程

一、背景 如果我问你&#xff0c;你知道动态代理吗&#xff1f; 你可能会如数家珍般地告诉我动态代理的作用以及好处。那我现在接着问你&#xff0c;你在项目中用过动态代理吗&#xff1f;这时候可能有些人就会犹豫了。那我再换一个方式问你&#xff0c;你在项目中有实现过统一…

【RT-DETR有效改进】轻量级网络ShuffleNetV2(附代码+修改教程)

前言 大家好&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持ResNet32、ResNet101和PP…

最新ChatGPT/GPT4科研应用与AI绘图及论文高效写作

详情点击链接&#xff1a;最新ChatGPT/GPT4科研应用与AI绘图及论文高效写作 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Clau…

详细介绍IP 地址、网络号和主机号、ABC三类、ip地址可分配问题、子网掩码、子网划分

1、 IP 地址: 网络之间互连的协议&#xff0c;是由4个字节(32位二进制)组成的逻辑上的地址。 将32位二进制进行分组&#xff0c;分成4组&#xff0c;每组8位(1个字节)。【ip地址通常使用十进制表示】ip地址分成四组之后&#xff0c;在逻辑上&#xff0c;分成网络号和主机号 2…

Educational Codeforces Round 161 (Rated for Div. 2)(A~E)

被教育咯 A - Tricky Template 题意&#xff1a; 思路&#xff1a;读题读了半天..可以发现&#xff0c;若对于第位而言&#xff0c;&#xff0c;那么c就一定与模板匹配。否则模板只需要取大写的即可。因此若所有的 &#xff0c;都有&#xff0c;那么就不能构造&#xff0c;否…

gitgud.io+Sapphire注册账号教程

gitgud.io是一个仓库&#xff0c;地址 https://gitgud.io/&#xff0c;点进去之后会看到注册页面。 意思是需要通过注册这个Sapphire账户来登录。点击右边的Sapphire&#xff0c;就跳转到Sapphire的登陆页面&#xff0c;点击创建新账号&#xff0c;就进入注册页面。&#xff0…

中仕公考:国考进面后资格复审需要准备什么?

参加国考面试的考生在资格审核阶段需要准备以下材料&#xff1a; 1、本人身份证、学生证或工作证复印件。 2、公共科目笔试准考证复印件。 3、考试报名登记表。 4、本(专)科、研究生各阶段学历、学位证书(应届毕业生没有可以暂时不提供)。 5、报名资料上填写的各类证书材料…

【webrtc】GCC 7: call模块创建的ReceiveSideCongestionController

webrtc 代码学习&#xff08;三十二&#xff09; video RTT 作用笔记 从call模块说起 call模块创建的时候&#xff0c;会创建 src\call\call.h 线程&#xff1a; 统计 const std::unique_ptr<CallStats> call_stats_;SendDelayStats &#xff1a; 发送延迟统计 const…

统计学-R语言-6.1

文章目录 前言参数估计的原理总体、样本和统计量点估计区间估计评价估计量的标准有效性 总体均值的区间估计一个总体均值的估计&#xff08;大样本&#xff09;一个总体均值的估计&#xff08;小样本估计&#xff09; 练习 前言 本篇文章将开始介绍参数估计的相关知识。 参数估…

本地安装配置禅道BUG管理系统并结合内网穿透实现公网访问管理界面

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个…