• 训练样本三


    基本信息

    样本名: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_MACHINESoftwareMicrosoftwareWindows NTCurrentVersionImage 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恶意文件解析与混淆研究

  • 相关阅读:
    功能类控件
    关系类控件-明细表
    WPF MenuItem 四种角色分析
    自定义的 ListBoxItem 自适应ListBox的宽度
    由DataGridTextColumn不能获取到父级DataContext引发的思考
    GDI+中发生一般性错误的解决办法(转帖)
    WPF中RadioButton绑定数据的正确方法
    C# 使用XML序列化对象(二)
    C# 使用XML序列化对象(一)
    WPF中RadioButton的分组
  • 原文地址:https://www.cnblogs.com/fangaojun/p/13638826.html
Copyright © 2020-2023  润新知