大神论坛

找回密码
快速注册
查看: 1097 | 回复: 0

[PC样本] 大神论坛 新人第一次逆向Cobalt Strike生成exe木马

666

主题

帖子

11

积分

初入江湖

UID
19
积分
11
精华
威望
22 点
违规
大神币
68 枚
注册时间
2021-03-14 10:39
发表于 2021-03-21 00:00
本帖最后由 666 于 2021-03-21 00:00 编辑

前言
Cobalt Strike(以下简称CS)是红队在渗透攻击中的一款神器,使用稳定,功能全面。本文是对CS生成的exe文件进行分析,看看CS生成的木马有什么高明之处。
  
准备工作
工具准备:Cobalt Strike  IDAx32dbgExeinfoPE CS能生成的木马有很多种,如下图所示:



这里我不一一介绍,有兴趣的同学自行去研究。我们这里先选择Windows Executable注:Windows Executable     生成可执行的分段payloadWindows Executable(S) 生成可执行的不分段Payload



生成之后我们会得到一个exe文件,这是我们今天进行逆向的主角。



逆向分析
CS生成的exe其实是一个loder,也就是加载器,加载器加载里面的shellcode来运行主要功能,所以我们进行逆向分析的时候也分成两个步骤:外层loder分析和内层shellcode分析。
外层loder分析
我们先用exeinfope对文件进行简单了解



无壳。接下来扔进IDA进行静态分析。



main函数这里调用了两个函数之后调用了一个Sleep,跟进27F0发现没什么东西,我们直接看1840



pipe是关键字,调用sprintf函数,拼接一个管道名。接下来创建了一个线程,进入创建的线程1713里看看



带着两个参数进入1648,接着看



这就是一个标准的建立管道的一个过程,重点我们关注一下WriteFile那里,向管道写入,写的就是我们的传参,这应该就是加密之前的shellcode。接下来返回到1840



返回时进入了17E2



先分配一个空间,然后进入1732



标准的从管道读,读的东西就是我们刚才写进的东西。再看158E



先开辟空间,然后将我们刚才读出来的东西与4个循环数进行异或(经过多次调试,发现这四个数每次都是不一样的),最后得到一串解密后的数据,我们有理由猜测,这解密后的数据就应该是执行的shellcode,最后开启线程执行shellcode。当然,光猜是不行的,我们要进行动态调试到内存里去抓抓看。接下来打开x32dbg进行动态调试。我们跟进到40158E里



异或之后的数据存储到了ds:[edi+ecx],我们到内存里跟一下



我们可以这是一个非常典型的PE文件,也就是外层加载器加载了一个dll文件,这个dll文件应该是CS马实现功能的主要地方。至此,我们外层的加载器分析告一段落。
内层shellcode分析
进入到StartAddress函数里,有一个jmp eax,会直接跳到我们刚才读出来的DLL,它里面的函数是这样的



第一个call不用太看,call ebx大概看了一下,开辟了一段空间,把这一段的数据写进去,然后下一个call eax转到另一个地方开始执行,这个地方就是我们dll的入口点了。



一点点往里跟踪,看看我们能不能找到有什么有用的信息网络请求行为:





设置休眠:



这里跟了一下,发现有个sleep函数,应该是与默认心跳有关那里。 操作相关:



注意这里,我们有一个InternetReadFile,把返回值读到eax里,这个地方就是判断你输入了什么指令,对应这几种情况




程序的大体逻辑就是这样。至此,我们已经对CS马的运行逻辑有了基本的了解。
不同生成方法对比
当然,我们只是分析了一种的情况,分段的马外层是一样的,但内层有区别,我们简单看一下,首先看一下解密后的shellcode



很明显和之前不一样了



循环的在获取API



发起请求,用virtualAlloc开辟一段空间,然后不断的用InternetReadfile读取文件,最后得到的dll就和上面的差不多了。



经过分析我们发现,CS的马主要的一个加载方式是用加载器解密shellcode,然后运行dll,所有主要功能都在dll里面,理论上加载器我们可以随意更换的。  


更多逆向分析资源,请访问  大神论坛

返回顶部