训练样本三

基本信息

样本名:3ee30a5cac2bef034767e159865683df
分析环境及工具:windows7 x64 rtfobj 火绒剑 MicrosoftOffice2016 dnSpy
MD5:3ee30a5cac2bef034767e159865683df
命令: Exploit:CVE-2017-11882.ASK!MTB

行为预览

利用漏洞执行代码,可以控制用户电脑上传下载执行文件

具体分析

virustotal查询样本

经过网站的查询基本可以确定是个利用CVE-2017-11882漏洞的执行代码的样本,样本则是个RTF文档

通过winhex打开也能发现是rtf的

RTF文档格式简单解析

数据 解释
01050000 OLE Version
02000000 Format ID
5061636b616765000000 ProgName (OLE2Link)
7dbc0d Data Size

也可以使用工具解析下,已经标出了哪里利用了CVE-2017-11882

也就是这里

oletools工具下载地址

动态调试office漏洞找到漏洞位置

  • 漏洞的原因
    该漏洞的成因是EQNEDT32.EXE进程在读入包含MathType的ole数据时,在拷贝公式字体名称时没有对名称长度进行校验,从而造成栈缓冲区溢出。
    该漏洞出现在模块EQNEDT32.EXE中, 该模块为windows的公式编辑器。由于该模块对于输入的公式未做正确的处理,攻击者可以通过刻意构造的数据内容覆盖掉栈上的函数地址,从而劫持程序流程,执行任意命令。
  • 设置调试器
    所以我们需要打开文档的时候调试这个EQNEDT32.EXE这个程序设置即时调试程序
    1. 打开注册表
    2. 在HKEY_LOCAL_MACHINE\Software\Microsoftware\Windows NT\CurrentVersion\Image File Execution Options中寻找xxxx.exe文件夹
    3. 如果这个文件夹不存在,那么就新建一个,例如:xxxx.exe
    4. 在文件夹里新建一个字符串键,名称为debugger,值为x32dbg.exe
    5. 如果使用的不是VC调试器,那么需要在环境变量中添加这个exe的启动路径
  • 开始调试
    在火绒剑监控里面可以看到释放了1.a文件
    这里缺图
    所以我们在CreateFile这个API那里下断点

    进行栈回朔,里面可以发现一些执行JS脚本的命令,先记下
    L"eval(\"sa=ActiveXObject;ab=new sa(\\\\\"Scripting.FileSystemObject\\\");eval(ab.OpenTextFile(ab.GetSpecialFolder(2)+\\\"\\\\\\\\1.a\\\",1).ReadAll());window.close()\")"

    继续看,第一个主模块调用的函数417810

    用ida观看,发现并不像漏洞的

    继续看下一个这个的Copy有长度限制也不符合

    再看下一个00411837的函数,这个一看发现就非常符合漏洞利用的情况

    在这里下断点,可以看到覆盖了栈,现先要跳过去执行

    转到内存观看

    这就是执行的shellocde

    利用shellode执行了1.a的js文件

分析1.a文件

  • 准备调试JS的工具
    这里我使用的是鬼鬼js调试工具
  • 自写Base64解密字符串
  • 进行解密

    这里我用的自己写的base64工具进行解密并且写入文件

    发现是个PE文件

    把前面的那些头去掉,用CFF查看发现是个NET的dll

分析StInstaller.dll

拉入反汇编工具我们知道上面是Work是主要函数
检测白名单文件是否存在,若存在则拷贝到其工作目录下

设置自启动

释放对应的恶意dll和tmp文件以及配置的config文件

释放的名字为Duser.dll

这个StInstaller主要用来释放这几个文件

启动rekeywiz.exe,rekeywiz.exe会加载Duser.dll,这就是白加黑

分析Duser.dll

  • 分析
    先用CFF发现是个.NET的dll文件,导出函数为图下两个

    直接放到dnSpy里面进行解析,可以看到这个dll的功能选取.tmp文件的前32字节当做秘钥,对后续的字节进行异或解密后,使用Assembly.Load 加载到内存执行。

  • 编写代码解密

    运行后解密出来的文件

分析SystemApp.dll

首先加载基础设置信息,设置两个时间回调函数GET函数,POST函数,通过基础配置Settings类的属性来判断是否需要获取系统信息,写入选择文件,最后执行两个时间回调函数GET,POST,执行时间是5000秒。

通过Settings的settingsFilePath来获取配置文件路径,然后通过Decode函数来加载到内存,在返回一个用配置文件信息初始化的Settings类,否则返回默认配置

这个字段可以看到之前我们JS解密的


解密函数和之前的一样,前32字节当做秘钥,对后续的字节进行异或解密

加密也差不多因为异或是可逆的

下载文件

process函数
Process函数主要将传入的数据文件解析执行,先申请出一个Loader类型,加载传入的data,然后将data解base64后,根据解码出来的数据的第一个byte来选择需要执行的功能

Case值 功能
1 获取系统信息 写入.sif文件
2 获取文件列表 写入.flc文件
3 获取指定文件,先复制移动到.fls
4 修改setting
5 更新c2地址
6 准备上传文件
7 加载文件执行
8 设置文件最大尺寸
9 下载文件

参考文章

响尾蛇(SideWinder)
CVE-2017-11882及利用样本分析
Office文件格式基础知识
Office恶意文件解析与混淆研究

posted @ 2020-09-09 14:55  NATIVE99  阅读(252)  评论(0编辑  收藏  举报