这是[信安成长计划]的第 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. Git在实际生产中的使用

    文章目录 Git在实际生产中的使用 简单情况下的代码提交 Fetch and Pull 仅获取某分支的代码 远程仓库已经合并了别人的代码 冲突产生原因与解决办法 不恰当的多个Commit合并为一个 G ...

  2. C# 计算三角形和长方形 周长面积

    编写一个控制台应用程序,输入三角形或者长方形边长,计算其周长和面积并输出. 代码如下: using System; using System.Collections.Generic; using Sy ...

  3. 【一个idea】YesSql,一种在经典nosql数据库redis上实现SQL引擎的方案(我就要开历史的倒车)

    公众号链接 最高级的红酒,一定要掺上雪碧才好喝. 基于这样的品味,我设计出了一套在经典nosql数据库redis上实现SQL引擎的方法.既然redis号称nosql,而我偏要把SQL加到redis上, ...

  4. golang中GPM模型原理与调度器设计策略

    一.GMP模型原理first: 1. 全局队列:存放待运行的G2. P的本地队列:同全局队列类似,存放待运行的G,存储的数量有限:256个,当创建新的G'时,G'优先加入到P的本地队列,如果队列已满, ...

  5. 请解释final finally finalize的区别

    final  关键字 ,可以定义不能被继承的父类.定义不能被重写的方法,常量 finally   关键字, 异常处理的统一出口 不管是否有异常都执行 finalize   方法(protected   ...

  6. pycharm下载安装教程

    简介: 首先,PyCharm操作简便,拥有一般IDE具备强大的功能,既适合新手,也可以满足开发人员的专业开发需求,接下来介绍一下如何下载和安装pycharm. ### 一:Pycharm下载 1.首先 ...

  7. 用socket写一个简单的服务器

    import socketsk=socket.socket()sk.bind(("127.0.0.1",7001))sk.listen()def login(url): with ...

  8. .exe文件自动重启

    echo  :杀死进程taskkill /f /im YYTWEB.exe  :等待10秒:ping 127.0.0.1 -n 10  start "" "D:\都江堰银 ...

  9. NSInvocation的基本使用

    //封装invacation可以调用多个参数的方法 -(void)invacation { //1.创建一个MethodSignature,签名中保存了方法的名称,参数和返回值 //这个方法属于谁,那 ...

  10. Android利用zxing生成二维码

    感谢大佬:https://blog.csdn.net/mountain_hua/article/details/80646089 **gayhub上的zxing可用于生成二维码,识别二维码 gayhu ...