1.Cobaltstricke生成原生exe,直接点击上线
-
这里会去访问我们C2服务器的一个地址,如下:
-
访问C2的地址查看内容,内容看不懂
-
利用OD,断API——HttpOpenRequestA
为什么要断这个api呢?来看看这个api的功能,官方解释
-
用于发送一个HTTP服务器的请求,断在这里我们就可以查看我们需要查找的ip。
-
下面来到这个API
-
断住之后发现其信息如下:
-
ip和端口直接可以看到,这个/B6sq 里面的内容应该就是让机器去反向链接这个ip和端口的,继续往下分析
-
断API,VirtualAlloc(这里是申请内存的地方)
-
这里发现把edi+edx 给al edx就是移动位数,然后把ebp+0x8给edi,然后有一次异或解密,ebx里面就是解密后的原文shellcode
-
这里看出来ebp+0x10是一张加密表,ebp+0x8就是异或混淆后的数据,那么在xor一次就异或回来了
-
然后在去VirtualProtect CreateThread
-
原生的这个很小的exe会去下载一个文件然后在加载这个文件,申请内存,xor解密,然后创建线程运行。
-
到此为止,stage的基本流程就分析完了。如果分析stageless就自己可以去分析,方式方法也差不多。下面是具体的一个流程介绍。
具体流程分析:
-
stage
-
申请内存(allocate memory)
-
复制Stager去这一块儿内存里
-
创建个线程,运行这个Stager
-
这个Stager会再次申请块儿内存 (allocate memory)
-
Stager去下载加密的payload,写入申请的内存中
-
Stager把执行流程转递给这个加密的payload
-
加密的payload自解密成Rellective DLL
-
然后把执行流程传递始Reflective DLL
-
efective DLL申请个块儿内存 (llocate memory)
-
然后初始化自己在新的内存里面
-
最后elecive DLL调用payload的入口点的函数
-
上线
-
stageless
-
申请内存(allocate memory)
-
复制Stager到内存
-
创建线程,运行Stager
-
Reflective DLL 申请内存
-
在内存中进行初始化
-
最后Reflective DLL调用payload的入口点函数
总结
分析cobaltstricke原生的exe,通过查看其winapi发现cobaltstricke生成远控木马的原理和方式。方便研究员去魔改我们的C2去修改我们的生成方式,并且绕过杀软的检测。
我们去分析一个远控exe的一个大概流程也和这个步骤大致是相似的。内容比较简单,大佬勿喷。
原文始发于微信公众号(亿人安全):浅析cobaltstricke原生exe
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论