0x00 前言

样本还是在星球看到的

0x01 基本信息

首先把样本下载到本地,winhex查看一下基本信息
image.png

基本可以确定是docx文档,尝试解压
image.png

这里可以确定是docx,直接添加docx后缀打开
又是典型的模板注入,注入地址http[:]//comodo[.]world/38
之前分析过几个donot的样本,都是这种方式的
image.png

载入的信息在VT上可以找到,昨天上传的,该地址目前vt还是全白
image.png

用于攻击的rtf文档就是这里的body
hash为5814950a7e44f89e338eca69dbee8a73
image.png

0x02 载入rtf文档

载入的rtf文档如下
image.png

根据上面的这些信息可以知道该文档应该是漏洞利用。

而之前在VT上又看到该文档与11882相关,于是再调试一下。
还是先打开word,然后插入公式编辑器,x32dbg附加之后在0041160f设置断点,此时可以看到堆栈一切正常
漏洞触发点应该在下面的00411658处
image.png

运行到00411658处之后,ESI如下:
image.png

EDI如下:
image.png

00411658指令执行之后,ESI赋值到EDI,成功淹没EBP
image.png

shellcode获取temp目录并放入到新开辟的内存中:
image.png

在%temp%目录下释放wbluikiiy.tty和image.ico文件,用于解密出后面远控的payload
image.png

image.png

image.png

然后读取tty文件的内容到新开辟的内存:
image.png

通过异或循环解密:
image.png

动态解密后面的代码:
image.png

image.png

创建开始菜单的连接
image.png

在C:\Windows\Tasks目录下释放js脚本,该脚本的功能是为了在后面调用执行dll文件
脚本内容为:var obl = new ActiveXObject(“WScript.shell”);
obl.run(‘rundll32 “C:\Windows\Tasks\Menu.dll”, tabs’);
image.png

var obl = new ActiveXObject(“WScript.shell”);.obl.run(‘rundll32”C:\Windows\Tasks\Menu.dll”,tabs’);
image.png

执行的Menu.dll如下
image.png

删除之前用于数据读取的文件:
image.png

删除之后结束掉当前的进程
image.png

0x03 Menu.dll

基本信息如下,是一个vc++编译的dll
image.png

通过之前的js脚本可以知道
程序最后会通过rundll32.exe 运行Menu.dll 参数为tabs
“C:\Windows\Tasks\Menu.dll” , tabs
image.png

这里参数为tabs的意思就是,在调用dll的时候,直接调用dll的tabs方法:
image.png

在这种时候,去查看dll的start函数和入口函数应该是如下的:
DLLmain:
image.png

__DllMainCRTStartup:
image.png

既然该dll的入口点是tabs函数,而tabs调用了sub_1000A2f0
那么直接查看sub_1000A2f0函数就可以了。
这里由于直接调试dll不方便,我就写了几行代码调用Menu.dll的tabs方法:

  1. #include<windows.h>
  2. #include<stdio.h>
  3. int main()
  4. {
  5. HMODULE hModule = NULL;
  6. hModule = LoadLibrary("Menu.dll");
  7. typedef void(__stdcall *Func)(char* key);
  8. Func funav=(Func)GetProcAddress(hModule,"tabs");
  9. char *a = ",tabs";
  10. funav(a);
  11. return 0;
  12. }

这里可以通过GetProcAddress函数直接获取到tabs的地址
image.png

这里可以看到是1000EC40,我们在该地址设置个断点,然后F9跑过来就可以了
image.png

释放的样本是一个远控样本,带有大量的混淆代码,最后会收集到本机一些基本信息上传到C2并与C2建立通信。
C2地址为:testypoha.top
分别释放两个文件
C:\Documents and Settings\Administrator\AppData\Roaming\EvMGR\ogg.bin
C:\Documents and Settings\Administrator\AppData\Roaming\EvMGR\BinWork.exe
image.png

一个do while循环,直到程序成功请求testypoha.top并且获取到返回值
image.png

最后这个木马就是体力活,没有什么特殊的,就跟着调试走下来就行了,问题就在于这个函数太长太长,跟的话需要一些耐心。
跟大佬沟通了一下,这个算是Donot的一个特征,就是payload的某个函数非常非常长。但实际上没什么特殊的功能,就是上传基本信息到C2,然后作为一个loader加载后续的payload。