-
UID:17777
-
- 注册时间2007-05-02
- 最后登录2025-05-02
- 在线时间18636小时
-
- 发帖786303
- 搜Ta的帖子
- 精华0
- 飞翔币211574
- 威望215717
- 飞扬币2615136
- 信誉值8
-
访问TA的空间加好友用道具
- 发帖
- 786303
- 飞翔币
- 211574
- 威望
- 215717
- 飞扬币
- 2615136
- 信誉值
- 8
|
[size=; font-size: 16pt,16pt]前言Cobalt Strike(以下简称CS)是红队在渗透攻击中的一款神器,使用稳定,功能全面。本文是对CS生成的exe文件进行分析,看看CS生成的木马有什么高明之处。[size=; font-size: 16pt,16pt]准备工作工具准备:Cobalt Strike IDAx32dbgExeinfoPE CS能生成的木马有很多种,如下图所示: 这里我不一一介绍,有兴趣的同学自行去研究。我们这里先选择Windows Executable注:Windows Executable 生成可执行的分段payloadWindows Executable(S) 生成可执行的不分段Payload 生成之后我们会得到一个exe文件,这是我们今天进行逆向的主角。 [size=; font-size: 16pt,16pt]逆向分析CS生成的exe其实是一个loder,也就是加载器,加载器加载里面的shellcode来运行主要功能,所以我们进行逆向分析的时候也分成两个步骤:外层loder分析和内层shellcode分析。[size=; font-size: 14pt,14pt]外层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马实现功能的主要地方。至此,我们外层的加载器分析告一段落。[size=; font-size: 14pt,14pt]内层shellcode分析进入到StartAddress函数里,有一个jmp eax,会直接跳到我们刚才读出来的DLL,它里面的函数是这样的 第一个call不用太看,call ebx大概看了一下,开辟了一段空间,把这一段的数据写进去,然后下一个call eax转到另一个地方开始执行,这个地方就是我们dll的入口点了。 一点点往里跟踪,看看我们能不能找到有什么有用的信息网络请求行为:  设置休眠: 这里跟了一下,发现有个sleep函数,应该是与默认心跳有关那里。 操作相关: 注意这里,我们有一个InternetReadFile,把返回值读到eax里,这个地方就是判断你输入了什么指令,对应这几种情况 程序的大体逻辑就是这样。至此,我们已经对CS马的运行逻辑有了基本的了解。[size=; font-size: 16pt,16pt]不同生成方法对比当然,我们只是分析了一种的情况,分段的马外层是一样的,但内层有区别,我们简单看一下,首先看一下解密后的shellcode 很明显和之前不一样了 循环的在获取API 发起请求,用virtualAlloc开辟一段空间,然后不断的用InternetReadfile读取文件,最后得到的dll就和上面的差不多了。 经过分析我们发现,CS的马主要的一个加载方式是用加载器解密shellcode,然后运行dll,所有主要功能都在dll里面,理论上加载器我们可以随意更换的。
|