这是[信安成长计划]的第 14 篇文章

0x00 目录

0x01 DotNet功能分析

0x02 DotNet功能执行

0x03 写在最后

在上两篇文章中,讲述了 CS 中的一种功能执行方式 RDI,这一次来分析一下另外一个非常重要的功能执行方式——DotNet

0x01 DotNet功能分析

CobaltStrike 提供了一种可以执行任意 DotNet 程序的方案,使用了名叫 invokeassembly 的 DLL,来加载和执行所传递的 DotNet 功能,提供这个方法的 Job 是 ExecuteAssemblyJob,它跟 RDI 不一样,它继承自 JobSimple 类

与 RDI 一样,它也有一些必须要处理的方法

在实际执行的时候,它会直接来运行 ExecuteAssemblyJob 的 spawn 方法

首先它会获取到 invokeassembly.dll,然后获取到它的 ReflectiveLoader 函数,接着就开始了任务的构建

随后会对其再进行一些设置的操作

在 fix 中,会有对 amsi 的一些处理

接下来有一个比较重要的操作,获取参数

在这里会将 this.file 和 this.args 都组合到一起

而这两个东西,正是我们要执行的 DotNet 和参数,所以说 CS 实际上是把我们要执行的内容当作参数来进行传输了,最后再交给 invokeassembly 来执行

而后就是任务的构建和发送了

0x02 DotNet功能执行

在执行到 DotNet 功能的时候,前面的处理操作先不管了,只看执行这里的

根据之前 RDI 的分析,也很容易能够区分出进程创建的位置,其中的操作基本都是一致的

直接就跳进函数的执行,这里面就包含了各种执行方式以及加载运行

之后执行权限就交给了 invokeassembly

这里再追下去的意义就不是很大了,主要就是调用接口来加载 DotNet 程序集,其中所用到的技术也是已经开源了的 Hosting CLR,可以参考下面的这篇文章来阅读

https://b4rtik.github.io/posts/execute-assembly-via-meterpreter-session/

https://github.com/b4rtik/metasploit-execute-assembly

0x03 写在最后

与 RDI 不同的是,我们并不需要在 DotNet 当中处理管道相关的内容,这些东西都由 beacon 和 invokeassembly 处理了,因为 DotNet 是由我们来传进去的,而 RDI 的功能它是不支持像 DotNet 这样直接调用的,而我们通过二开的方式来进行了使用,就需要直接按照所规定好的方式来进行处理才可以。

CobaltStrike逆向学习系列(14):CS功能分析-DotNet的更多相关文章

  1. CobaltStrike逆向学习系列(15):CS功能分析-BOF

    这是[信安成长计划]的第 15 篇文章 0x00 目录 0x01 BOF功能分析 0x02 BOF功能执行 0x03 写在最后 其实在看过 RDI 与 DotNet 功能执行之后,BOF 的执行基本就 ...

  2. CobaltStrike逆向学习系列(1):CS 登陆通信流程分析

    这是[信安成长计划]的第 1 篇文章 关注微信公众号[信安成长计划][SecSource] 0x00 目录 0x01 密码校验 0x02 aggressor.authenticate 0x03 agg ...

  3. CobaltStrike逆向学习系列(11):自实现 Beacon 检测工具

    这是[信安成长计划]的第 11 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 检测原理 0x02 检测方案 0x03 存在的问题 0x04 解决方案 0x05 示例代码 0x06 ...

  4. CobaltStrike逆向学习系列(10):TeamServer 启动流程分析

    这是[信安成长计划]的第 10 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 基本校验与解析 0x02 初始化 0x03 启动 Listeners 在之前的分析中,都是针对 Cob ...

  5. CobaltStrike逆向学习系列(2):Stageless Beacon 生成流程分析

    这是[信安成长计划]的第 2 篇文章 关注微信公众号 [信安成长计划] 0x00 目录 0x01 Patch Beacon 0x02 Patch Loader 0x03 文件对比 0x04 流程图 C ...

  6. CobaltStrike逆向学习系列(12):RDI 任务发布流程分析

    这是[信安成长计划]的第 12 篇文章 0x00 目录 0x01 任务构建 0x02 结果处理 0x03 功能 DLL 分析 之前的分析都是针对整个 CS 的框架来进行的,但是功能也是整个 C2 中相 ...

  7. CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

    这是[信安成长计划]的第 7 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 Controller->TeamServer 0x02 TeamServer->Beacon ...

  8. CobaltStrike逆向学习系列(6):Beacon sleep_mask 分析

    这是[信安成长计划]的第 6 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 C2Profile 分析 0x02 set userwx "true" 0x03 s ...

  9. CobaltStrike逆向学习系列(3):Beacon C2Profile 解析

    这是[信安成长计划]的第 3 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 Controller 端分析 0x02 Beacon 端分析 0x03 展示图 在上一篇文章中完成了 S ...

随机推荐

  1. YC-Framework版本更新:V1.0.5

    分布式微服务框架:YC-Framework版本更新V1.0.5!!! 本次版本V1.0.5更新 所有模块依赖调整: 部分问题修复: Nacos模块化: Eureka模块化: 支持SOA(即WebSer ...

  2. leetcode 54. 螺旋矩阵 及 59. 螺旋矩阵 II

    54. 螺旋矩阵 问题描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, ...

  3. winform全局异常处理

    static void Main() { //设置应用程序处理异常方式:ThreadException处理 Application.SetUnhandledExceptionMode(Unhandle ...

  4. CMake语法—环境变量(Environment Variable)

    目录 CMake语法-环境变量(Environment Variable) 1 定义环境变量 2 应用环境变量 2.1 代码结构 2.2 示例代码 2.3 运行结果 3 小结 CMake语法-环境变量 ...

  5. HashSet 实现类

    HashSet 实现类 通过 HashCode 判断元素是否存在,若存在则不添加,否则添加以此实现唯一性 常用方法 Modifier and Type Method and Description b ...

  6. java有四种访问权限

    Java面向对象的封装性是通过对成员变量和方法进行访问控制实现的,访问控制分为4个等级:私有.默认.保护和公有,具体规则如下表:

  7. gin框架使用Air实时加载

    Air实时加载 本章我们要介绍一个神器--Air能够实时监听项目的代码文件,在代码发生变更之后自动重新编译并执行,大大提高gin框架项目的开发效率. 1.1.1. 为什么需要实时加载? 之前使用Pyt ...

  8. Kubernetes集群PV和PVC详解

    Kubernetes集群高级存储资源PV及PVC 文章目录 Kubernetes集群高级存储资源PV及PVC 1.高级存储PV和PVC概念部分 2.PV和PVC资源的生命周期 3.PV资源介绍与案例配 ...

  9. React 世界的一等公民 - 组件

    猪齿鱼Choerodon平台使用 React 作为前端应用框架,对前端的展示做了一定的封装和处理,并配套提供了前端组件库Choerodon UI.结合实际业务情况,不断对组件优化设计,提高代码质量. ...

  10. TensorFlow 深度学习中文第二版·翻译完成

    原文:Deep Learning with TensorFlow Second Edition 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原则>, ...