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

admin 2022年4月23日02:32:37CobaltStrike逆向学习系列(15)-CS功能分析-BOF已关闭评论108 views字数 1002阅读3分20秒阅读模式

其实在看过 RDI 与 DotNet 功能执行之后,BOF 的执行基本就不用再说了,唯一需要提及的可能就是它所包含的技术,而且相关的文章和代码也都很丰富了

0x01 BOF功能分析

在 CS 中,有相当一部分功能都是 BOF 形式的,我们随意选择一个

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

它继承了 PostExInlineObject 类,需要自己实现的并不多,但实际上,一些函数还是自己实现的好

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

在实际调用的时候,会先获取到 beacon 的 payload 和架构,然后一起传入后,调用了 go

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

在 go 函数里,首先会获取到需要执行的 bof 文件,然后对其进行解析

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

在其中他会获取执行函数,默认执行的函数是 go

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

这里就可以自己实现这个函数,让名字按照自己的想法来走

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

之后会对一些关键的位置进行解析,OBJ 实际上就是编译后但未链接的目标文件,这里就是把一些关键的节都取出来

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

然后接着就进行了任务的构建和发送,在构建的时候就将关键的信息都做成了一段数据,并不是将整个 OBJ 文件直接发送过去

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

最后一个放入的是参数,在我们当前这个 BOF 功能中,参数就是 beacon 的 payload,用于 BypassUAC 之后直接上线的

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

再结合之前的 DotNet 的操作,可以发现,参数是非常重要的,也是非常便于扩展的,我们可以定制自己想要的方式,然后将其他的内容通过参数传递过去,只需要在接受的时候进行处理就好了,后期的扩展性是很好的

0x02 BOF功能执行

这里就不跟了,任务号是 100,感兴趣的可以去看看

其中所使用的技术,有很多文章和开源代码了,直接参照这些会更舒服一点

直接来看 COFFLoader 就可以了

https://www.trustedsec.com/blog/coffloader-building-your-own-in-memory-loader-or-how-to-run-bofs/

https://github.com/trustedsec/COFFLoader

WBGlIl 的文章也是非常好的参考

https://wbglil.gitbook.io/cobalt-strike/cobalt-strike-yuan-li-jie-shao/untitled-3

0x03 写在最后

虽然这三种执行方式的细节点都直接略过了,实际上它们中间能够进行的修改操作还是可以有很多的,有一些细节是可以再优化一下了,不过整体来说,CS 是真的强,整体的代码规划和设计非常的完善,要在上面新增一些功能或者做一些改动都是非常方便的。

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月23日02:32:37
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CobaltStrike逆向学习系列(15)-CS功能分析-BOFhttp://cn-sec.com/archives/916932.html