Lotus Blossom 行动分析 1 漏洞介绍 2 分析使用的环境和工具 4 利用漏洞编写写EXP

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的主要途径有:

http://binvul.com/ https://www.exploit-db.com/ https://www.securityfocus.com/

3.2 复现漏洞

◆ 执行poc以及样本

3.2.1 搭建环境执行poc获取现场

◆ 用OD附加目标Office,把poc若拽到Word中运行

分析:

覆盖的返回地址是0x127aac.

3.2.2 定位漏洞

◆ 调试漏洞, 定位漏洞触发点,分析漏洞成因

    定位漏洞触发模块/函数/过程

在分析一处点附近堆栈的时候,溢出点下面的堆栈一般是刚刚调用的函数的上一层函数堆栈;溢出后可能已经破坏,溢出点上面的堆栈是刚刚执行的函数堆栈,可以发现一些模块内的地址,由此判断触发的模块.

比如:

  • 原创手绘:

    • .

    • 这里的模块是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,就能执行栈中的自定义代码了.