Lotus Blossom 行动分析
1 漏洞介绍
1.1 代号 - Lotus Blossom行动
漏洞利用率很高 从2012 —2015或者说最近都还在使用 CVE-2012-0158
Lotus Blossom--莲花: 描述了对东南亚各国政府和军事组织的持续网络间谍活动。该报告公开了目标、工具和攻击技术,并提供了关于莲花营销活动的完整详情,包括所有妥协指标。42小组 使用PaloAlto网络自动聚焦™平台发现了这些攻击,这使得分析人员能够将数百万个报告的结果与野火所产生的结果关联起来。
1.2 具体信息
CVE-2012-0158 漏洞是一个典型栈溢出、长度可控漏洞,该漏洞是微软Office中的MSCOMCTL.ocx中MSCOMCTL.ListView控件检查失误造成的,攻击者可以通过精心构造的数据来控制程序的EIP实现任意代码执行。
CVE-2012-0158 的微软漏洞编号是ms12-027。
MSCOMCTL.ocx 可以认为是一种COM组件动态链接库,以ocx为后缀。MSCOMCTL.ListView 控件可以认为是MFC的列表控件了。
Windows系统下,除了某种编程语言的控件之外,还提供一些通用控件 封装在COM组件以.ocx为后缀的动态链接库里面。
2 分析使用的环境和工具
◆ 漏洞分析环境与工具:
◆ 操作系统: Window 7专业版(32位)
◆ 软件: office 2003 sp3
◆ 工具: Ollydbg, windbg, IDA Pro
◆ OfficeMalScanner, python模块oletools(rtfobj)
注:
OfficeMalScanner 可以用来扫描解析 office 文档格式。
python模块oletools, 可以用来执行 rtfobj 命令。
3.1 获取POC
获取Poc的主要途径有:
◆ 网络,论坛,Metasploit
◆ http://binvul.com/
◆ https://www.exploit-db.com/
◆ https://www.securityfocus.com/
3.2 复现漏洞
◆ 安装office 2003 sp3
◆ 执行poc以及样本
3.2.1 搭建环境执行poc获取现场
◆ 用OD附加目标Office,把poc若拽到Word中运行

分析:
覆盖的返回地址是0x127aac.
3.2.2 定位漏洞
◆ 调试漏洞, 定位漏洞触发点,分析漏洞成因
定位漏洞触发模块/函数/过程
在分析一处点附近堆栈的时候,溢出点下面的堆栈一般是刚刚调用的函数的上一层函数堆栈;溢出后可能已经破坏,溢出点上面的堆栈是刚刚执行的函数堆栈,可以发现一些模块内的地址,由此判断触发的模块.
比如:

原创手绘:

分析: 如果不确定是那一层调用的返回的溢出地址,那就在RETN/RET处下断点. 最接近现场而未移交权力的ret所在模块就是目标模块,即 哪个函数的ret 被Poc代码覆盖了,就是我们的目标模块.
这里的模块是MSCOMCTL!0X275C8A0A.
顺势,找到0x0X275C8A0A所在过程的起始位置

定位模块/函数/过程内具体子过程
在 定位好的模块/函数/过程内部起始位置下断点,然后单步补过,注意观察栈的返回地址,什么时候被覆盖.
把数据窗口定位到刚才被覆盖的位置,然后从刚才找出的模块过程开始位置单步补过跟

跟进结果如下

分析:
可以看到,刚好执行完
0x275c8a05C: call MSCOMCTL.0x275c876d
就将栈空间覆盖修改了.
进入0x275c8a05C: call MSCOMCTL.0x275c876d 跟进

3.2.3 分析漏洞
找出该模块

使用IDA分析:
根据前面的分析结果:
触发漏洞API: MSCOMCTL!0x275C876D
造成溢出的实际位置:MSCOMCTL!0X275C87CB

结合动态调试,查看相关参数异常:

分析:
可以看到,参数0x8282,异常的大
在POC中搜寻以下0x8282查看是否这个数字来源于文档设定
使用010editor打开

分析长度数值果然是通过文档数据设定的,还看到了我们覆盖返回地址的数据41414141
验证栈的覆盖的精确性

4 利用漏洞编写写EXP
这个时候直接使用 一个 jmp esp,就能执行栈中的自定义代码了.
Lotus Blossom 行动分析的更多相关文章
- CVE-2012-0158:Microsoft Office MSCOMCTL.ocx 栈溢出漏洞调试分析
0x01 Lotus Blossom 行动 在 2015 年 6 月,国外安全厂商 Palo Alto Networks 的威胁情报团队 Unit42 发现了一起针对东南亚政府的一次间谍行为,试图获取 ...
- Lotus分析
一 Lotus的任务 Lotus是一个消息通知服务,topic和subscription是多对多的关系.后面我加了一个发送自定义邮件和自定义短信的功能. 产品里面有个监控报警和通知列表.监控报警里创建 ...
- b2c项目基础架构分析(二)前端框架 以及补漏的第一篇名词解释
继续上篇,上篇里忘记了也很重要的前端部分,今天的网站基本上是以一个启示页,然后少量的整页切换,大量的浏览器后台调用web服务局部.动态更新页面显示状态这种方式在运作的,从若干年前简单的ajax流行起来 ...
- b2c项目基础架构分析(一)b2c 大型站点方案简述 已补充名词解释
我最近一直在找适合将来用于公司大型bs,b2b b2c的基础架构. 实际情况是要建立一个bs架构b2b.b2c的网站,当然还包括wap站点.手机app站点. 一.现有公司技术人员现状: 1.熟悉asp ...
- Lotus 迁移到Exchange 2010 之准备使用Transport 同步Lotus 相关信息!
这里我们先来分析下Lotus迁移到Exchange2010 的一些原理,由于存在一定周期的共存时间,因此在共存期间必须来实现相应的同步计划,整个同步计划包含了如下的同步计划:
- 使用awstats分析iis站点的日志
环境:win7 + iis7 + perl(ActivePerl-5.20.1.2000) + awstats 7.3 一.找到iis日志所在目录 建议全部都打勾 二.安装perl AWStats是p ...
- Nmon 性能:分析 AIX 和 Linux 性能的免费工具
原文摘自: http://www.ibm.com/developerworks/cn/aix/library/analyze_aix/ 官网:http://www.ibm.com/developerw ...
- 52. 模版和设计元素——Lotus Notes的代码重用
不论是理论上还是实用上,代码重用都是编程的一个重要议题.可以从两个角度来讨论代码重用. 一是逻辑上代码以怎样的方式被重用.既可以通过面向对象的思想普及以来耳熟能详的继承的方式.比如先建了一个车的基类, ...
- NSA Fuzzbunch分析与利用案例
Shadow Brokers泄露出一份震惊世界的机密文档,其中包含了多个 Windows 远程漏洞利用工具.本文主要介绍了其中一款工具Fuzzbunch的分析与利用案例 1 整体目录介绍 解压EQGR ...
随机推荐
- Python self的用法
1)不加self是局部变量,只在这个方法里有效:加self则是实例变量,相当于别的函数定义的变量你实例化出来就可以使用 #coding:utf-8 class Person: def __init__ ...
- NX二次开发-UFUN求两个对象最短距离UF_MODL_ask_minimum_dist
NX9+VS2012 #include <uf.h> #include <uf_modl.h> #include <uf_ui.h> UF_initialize() ...
- 移动端单选插件-jquery
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- D语言简介
D语言,一种通用计算机程序语言,威力强大.功能丰富,支持多种编程范式,例如面向对象.[1] D语言最初由Digital Mars公司就职的Walter Bright于2001年发布,意图改进C++语 ...
- [JSOI2019]精准预测
题目 这么明显的限制条件显然是\(\text{2-sat}\) 考虑按照时间拆点,\((0/1,x,t)\)表示\(x\)个人在时间\(t\)是生/死 有一些显然的连边 \[(0,x,t+1)-> ...
- USACO2008 Patting Heads /// 筛数 oj24705
题目大意: N (1 < N < 100,000)头牛被编号为1-N,围坐成圈 每头牛都被画上数字Ai (1 ≤ Ai ≤ 1,000,000),可能重复 逐个起来拍打 其他身上的数字是 ...
- docker集群管理之swarm
一.简介 docker集群管理工具有swarm.k8s.mesos等,我所用到的是swarm和k8s,这篇文章主要介绍swarm:swarm是docker集成的原生 管理工具,只要你安装上docker ...
- 与960 Grid System相关的那些问题
为什么是960px? 一直以来,网页设计师都希望寻找一个理想的页面宽度值,既能适应大部分屏幕,又尽可能的在一行显示更多的信息. 我们首先会考虑的是全屏自适应,但这并非一个好的解决方案.一方面,需要做一 ...
- C++之constexpr
一.常量表达式:是指值不会改变并且在编译过程就能得到计算结果的表达式.一个对象是不是常量表达式是由它的数据类型和初始值共同决定. ;//虽然初始值是字面值常量,但是它的数据类型只是普通int. con ...
- 6.RDD算子实战
from pyspark import SparkContext,SparkConf import sys if __name__ == '__main__': if len(sys.argv) != ...
