C2profile中的magic_mz_x86和magic_mz_x64

admin 2023年8月5日12:45:48评论44 views字数 2275阅读7分35秒阅读模式

0x00 前言

很久没更新公众号了,于是从星球里摘了一篇比较通俗易懂的文章,适合新手小伙伴。原文如下:


周末写一个在线工具(后面会发布的),看见C2profile中magic_mz_*配置项,于是搜了搜,发现没有人写关于这个。打算这周写个文档发星球。哪知道周一看twitter,发现有同学抢先一步发了,卷啊,太卷了!不过我还是要写。他文章中有一些笔误:https://www.redteam.cafe/red-team/shellcode-injection/magic_mz_x86-and-magic_mz_x64

  • 这个功能是4.2以后加入的,不是 2.4.3

  • dec abp应该是dec ebp


    C2profile中的magic_mz_x86和magic_mz_x64

都是笔误,无伤大雅,可能一些新手同学会出问题,所以我在这儿先指出来。回归正题,这2个配置有什么用?


0x01 使用

magic MZ,是PE结构的前2个字节,标志着这是一个PE文件,和图片文件头、压缩文件头一个意思。这个值是固定的4D 5A。我们使用cobaltstrike的时候,看过我前面文章关于cs payload加载的同学应该知道,植入体最后都是使用的beacon.dll,这是一个反射dll,默认是以4d 5a 52 45开头的。beacon.dll一般是不落地的,在内存中,杀毒软件会通过这个头在内存中定位我们的样本,因此我们修改这个头,可以达到一定的逃逸作用。

首先我们看看官方解释:

https://www.cobaltstrike.com/help-malleable-postex

C2profile中的magic_mz_x86和magic_mz_x64

  • 覆盖我们Beacon反射dll的4D 5A 52 45

  • 需要根据架构不同编写指令

  • 不能是随便的数据去覆盖,必须是有效的指令,但是这个指令也不能瞎操作

前2条应该好懂,最后一条是指令,还不能瞎操作,这个怎么弄?举个例子:

a+1-1 = a,我们进行了一次加法操作和一次减法操作,但是结果不变。懂了吧。

老同志看见这个可能要笑了,这不就是花指令么,是的就是。

0x02 实操

这涉及到汇编指令了,我详细写操作,让新手同学,学几条指令也能使用cs这个配置,而不必担心不会汇编。

我们先下载编译工具nasm,地址:https://www.nasm.us/

然后编写如下代码,这个是官方给的默认值MZRE:

bits 32       ;指定32位程序,也就是x86架构 section .text ;声明代码段 global _start ;指定入口函数 _start:       ; dec ebp       ;减1 pop edx       ;出栈 push edx      ;入栈 inc ebp       ;加1

C2profile中的magic_mz_x86和magic_mz_x64

使用notepad++打开x86文件:

C2profile中的magic_mz_x86和magic_mz_x64

然后我们把这个值填入magic_mz_x86配置中:

set magic_mz_x86 "MZRE";

明白了原理,我们实际操作起来。我列出了一些两两一组的指令,记住操作过去,再操作回来就行了。自己也可以去翻翻指令学习下,自己想一个方法。或者google花指令。

bits 32        ;指定32位程序,也就是x86架构section .text  ;声明代码段 global _start  ;指定入口函数_start:       ;dec ebp        ;减1inc ebp        ;加1inc eaxdec eaxnot ebx        ;取反not ebxpush edx       ;入栈pop edx        ;出栈XCHG eax,ebx   ;交换XCHG eax,ebx ;各位自己随机组合
bits 64section .textglobal _start_start:pop r9push r9inc r8dec r8not r10not r10XCHG eax,ebxXCHG eax,ebx


0x03 测试

我们分别编译上面x86和x64的汇编,编译结果如下(使用notepad++的hexeditor插件查看):

C2profile中的magic_mz_x86和magic_mz_x64

上面是结果,很多字符是不可见字符,这个没关系,CS配置文件支持16进制。

C2profile中的magic_mz_x86和magic_mz_x64

最后我们生成stageless的raw格式的代码看看:

C2profile中的magic_mz_x86和magic_mz_x64

但是上线发现x64的不能上线,最后查看报错,是DOS头太长了,我们使用c2lint检测(PS:使用c2profile前一定要使用c2lint检测)。

C2profile中的magic_mz_x86和magic_mz_x64

最后验证出:

  • x86最大长度是27个字节

  • x64最大长度是12个字节

最后减少点x64的指令,就能上线成功。


0x04 总结

CS有很多细节需要探究,研究越多,你越发觉CS的强大。除了这2个配置,网上很少人提起,还有其他配置,虽然CS现在被各种杀软针对的厉害,在默认配置或者一定的自定义配置下都很难逃逸防御,需要高度的二次开发和定制。但是CS整体生态实在是强大,与其自写C2,不如研究CS,然后二次开发它。



C2profile中的magic_mz_x86和magic_mz_x64【公鸡队之家】知识星球的核心主题主要分为以下种类:

  1. 前沿技术分析,主要以红队技术为主。

  2. 星主专项,星主会不定期的制定技术专项,由浅入深的编写技术内容。

    • 《bypass AMSI的前世今生系列》

    • 《我的CS笔记之- In-memory Evasion系列》

    • 《针对域证书服务的攻击系列》

  3. 大咖分享,星球会邀请技术大咖,做专题分享。

    • 《实操系列》-17bdw

    • 《mimiktz那些不为人知的功能系列》-haya

    • 《不修改注册表获取windows明文密码若干姿势系列》-李雷

  4. 星球作业,星球每月会发布一份作业邀请,由鸡友们完成作业,并获得相应奖励。

    • 《我的CS笔记之xxxx》

    • 《我的bypass笔记之xxxx》

  5. 鸡友故事会,不定期邀请鸡友分享故事,有技术成长之路、有真实生活经历、亦或是自己的非技术爱好,这就是人生。

    • 《我的四分之一人生》

  6. 每日打卡,星球打卡是星球的八卦区,在这里,不违法就是对的。

除此还有星球靶场、星球仓库、星球群......

C2profile中的magic_mz_x86和magic_mz_x64

原文始发于微信公众号(我需要的是坚持):C2profile中的magic_mz_x86和magic_mz_x64

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年8月5日12:45:48
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   C2profile中的magic_mz_x86和magic_mz_x64http://cn-sec.com/archives/575280.html

发表评论

匿名网友 填写信息