首页
社区
课程
招聘
[原创]Cobalt Strike4.0远控木马分析
2020-12-21 23:22 19414

[原创]Cobalt Strike4.0远控木马分析

2020-12-21 23:22
19414

1. 概述

Cobalt Strike是渗透测试神器,其功能简介就不用多说了,其4.0版本更新已有一段时间了,这里分析一下,若有错误的地方望大伙指出,谢谢。

2. 样本信息

样本名 artifact4.exe
样本大小 14,336 字节
MD5 9ff9170e001f5619a0be11516051f538
SHA1 b824ed85d7dbe14f193f70d328d061e90c760736

3. 实验环境

服务端:kali 2020 ip:192.168.202.131
客户端:windows 7 ip:192.168.202.139
受控端:windows 7 ip:192.168.202.132

4. 简单查壳

5. 具体分析

5.1后门主体部分:

进入主函数,主要看sub_401840里面的主要功能

 

进入sub_401840函数,先获取系统时间戳,然后拼接字符串和创建线程通过管道读取shellcode,最后执行shellcode。

 

拼接的管道名\.\pipe\MSSE-5296-server:

 

跟进创建线程执行的函数:
图片描述

 

继续跟进函数WriteShellcodeInPipe_401648,其主逻辑首先创建命名管道,再把加密过的大小为0x320h的shellcode写入管道:

其shellcode内容如下:

写入shellcode:

 

跟进接收shellcode函数RevShellcode_4017e2:其主体逻辑是先申请内存存放读取出来的shellcode,然后解密并执行。
图片描述
从管道读取shellcode到内存中:
图片描述

 

将读取出来的Shellcode在DecyptAndrRunShellcode_40158E函数执行解密,该函数的主体逻辑,申请内存存放解密后shellcode,然后修改内存属性并跳转执行:
图片描述

 

其解密算法如下,解密算法比价简单,首先遍历shellcode,遍历次数与4求模,得到的值作为403008数组的下标得到一字节,用该字节与shellcode对应遍历时的字节异或,最终得到解密后的字节:
图片描述

 

解密所需的数组:
图片描述

 

解密后的数据:

 

紧接着跳转到shellcode并执行:

# 5.2Shellcode部分:

先加载wininet.dll:

 

再调用函数InternetOpen函数创建一个HINTERNET根句柄:

 

连接控制端192.168.202.131:8081

 

创建请求句柄,并把数据发送到服务器。

 

申请0x400000大小的内存:

 

不断调用InternetReadFile读0x2000大小的数据到申请的内存中:

读入数据后:

 

然后跳转执行到所申请的0x400000大小的内存:

 

在内存0x026a0037处解密出一个Dll,具体的解密算法如下:

解密后的数据如下,并将其dump出:

5.3反射注入DLL:

这个Dll比较有意思,先查看解密出来的DLL,0x026A0030 jmp ebp 跳转到0x026A003F,也就是DLL的Dos头部分,这个Dos是被修改过的,0x026A003F dec ebp和 0x026A00A0 pop edx 没特殊含义,接下来call 026A0046 和pop ebx 主要用作保存当前eip到ebx,然后ebx加上0x7cb2,也就是导出函数ReflectiveLoader函数的偏移量 :

 

ReflectiveLoader中会调用virtualalloc()函数,申请大小为0x3D000的内存,用于存放DLL:

 

在内存中反射注入dll,存放在0x0690000处:

 

然后压入3个参数执行dll的dllmain函数:

 

dump出的Beacon.dll


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 4
打赏
分享
最新回复 (8)
雪    币: 192
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_rmgobvua 2021-2-6 06:01
2
0
这个命命管道怎么得出来的?
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
醒木i 2021-4-13 12:03
3
0
老哥,请问一下,dll是怎么dump出来的啊,利用了什么工具嘛。我现在动态解密解密出这个dll了,也想保存出来用IDA查看。
雪    币: 13492
活跃值: (8751)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Genes 2021-4-13 15:31
4
0
醒木i 老哥,请问一下,dll是怎么dump出来的啊,利用了什么工具嘛。我现在动态解密解密出这个dll了,也想保存出来用IDA查看。
LordPE。
在解密后的时候给dump出来。
雪    币: 145
活跃值: (854)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiaozuzhi 2021-4-19 16:20
5
0
pe-sieve 就好。
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
醒木i 2021-4-30 15:15
6
0
xiaozuzhi pe-sieve 就好。
大哥 你有pe-sieve的程序吗,github上的只有源码,要编译,我没有那个CMake搞不了。网上也下不到现成的exe
雪    币: 191
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
暴打章鱼哥 2021-5-23 20:34
7
0
哥,Shellcode部分怎么追到的啊,我从EAX取出的地址哪看,好像是加了花的,
雪    币: 10087
活跃值: (4275)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Willarcap 2021-5-24 14:06
8
0
醒木i 老哥,请问一下,dll是怎么dump出来的啊,利用了什么工具嘛。我现在动态解密解密出这个dll了,也想保存出来用IDA查看。
也可以用 x64dbg,鼠标右键,内存布局,找到 dll 的地址,鼠标右键,将内存转存到文件
雪    币: 25
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_ljxnosvl 2022-6-27 11:12
9
0

在client中直接生成stageless的RAW的形式得到的beacon.bin就对应这里的dumped.dll

最后于 2022-6-27 11:53 被mb_ljxnosvl编辑 ,原因:
游客
登录 | 注册 方可回帖
返回