| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> CVE-2012-0158漏洞分析与复现 -> 正文阅读 |
|
[系统运维]CVE-2012-0158漏洞分析与复现 |
CVE-2012-0158漏洞分析一、漏洞信息1. 漏洞简述
2. 组件概述Microsoft Office 是由微软公司开发的一套基于 Windows 操作系统的办公软件套装。常用组件有 Word、Excel、PowerPoint等。最新版本为Microsoft 365及Office 2019(正式版本)。 3. 漏洞影响Windows系统下Microsoft Office 2003 SP3, 2007 SP2 和 SP3, 2010 和 2010 SP3。 4. 解决方案
二、漏洞复现1. 环境搭建
2. 复现过程本次复现设置的payload为在目标系统中启动calculator.exe (1) Kali中启动Metasploit生成木马文件
?
(2) 将word木马文件发送至靶机 ?(3) 运行word ?可看到跳出计算器窗口 三、漏洞分析1. 基本信息
2. 背景知识1. 栈溢出 程序将参数传入栈中时没有检查传入的参数是否大于预定的长度,导致栈中关键数据被参数覆盖 2. 跳板技术 从汇编角度讲,在函数执行retn返回前,ESP刚好指向栈中存放返回地址的+0x4地址,若是发生栈溢出,将函数的返回地址覆盖为jmp esp,剩下的部分覆盖为shellcode,程序就会在返回时自动跳转到shellcode地址,这种方法能够增加shellcode的写入空间,并且绕过ASLR。 3. 详细分析1. 基础分析 参考《漏洞战争》及其配套资料,首先尝试运行配套资料中的poc.doc文件,会发生: 错误报告中显示出现了错误的访问地址0x41414141 使用二进制编辑器查看poc文件原格式: 看到41414141字符串 从DOCF11E0开始是OLE签名,从这里开始一直至结束部分能够被OffVis识别,通过将文件中这部分数据单独提取出来,并制成二进制文件,以放在OffVis中查看 制成二进制文件过程如下: 先将这部分数据复制到文档中 8 将文档中的十六进制的内容编码成二进制文件,这里使用python语言实现:
将输出的文件b放在OffVis中查看格式,搜索41414141十六进制内容,找到其位置 0x41414141位于Data字段 2. 动态分析 调试前需要先设置OD。首先打开选项-调试选项,取消图中忽略的中断和异常: 插件-StrongOD-Options,取消勾选Skip Some Exceptions 打开Microsoft Word,使用OD附加进程WINWORD,按F9运行后打开poc文件 ?继续按F9,让程序运行,此时系统发生报错,提示为: 查看栈中数据 可发现最近的返回地址为0x275C8A0A,在反汇编窗口中跟随: ?可看到函数MSCOMCTL.275C876D,初步断定是这个函数引起的栈溢出,在这里设置断点,重新运行,到达断点处此时栈中还没有发生溢出 ?单步步入进一步确定发生溢出的位置,当运行到指令
发现栈中数据逐渐被覆盖,一直执行这个rep movs指令,栈的前后变化如图: ? 可以看到从0x001215DC开始,往下的数据被逐个覆盖掉,就此,成功找到发生栈溢出的函数MSCOMCTL.275C876D 测试过poc.doc后,尝试分析用msf生成的运行计算器的msf.doc 重新运行word并附加,F9,打开msf.doc文件,F9运行,由于之前测试poc时在函数MSCOMCTL.275C876D处设置了断点,此次运行时程序自动断在了此处,跟进后运行至
指令执行前后栈中变化如下: ? 图中可以看到栈中的返回地址被覆盖为27583C30,在反汇编窗口中查看该地址指令: ?指令为jmp esp,使用跳板修改程序执行流,那么说明栈中返回地址以下(0x001215EC以下)的内容为shellcode,在数据窗口和反汇编窗口中跟随这部分内容 能够看到shellcode前面是一堆“滑板指令”,运行后内存数据无任何变化,一直运行这这里时: ?能够看到一段循环指令,指令后方出现call 001217B1,单步执行这个循环发现数据窗口中地址0x001217B1的内容在逐渐发生变化,初步断定为shellcode在解码操作,将其全部解码后数据窗口如图所示: 继续跟进call 001217B1,在执行指令001217B4 8D85 B2000000 lea eax,dword ptr ss:[ebp+0xB2]后发现寄存器EAX指向了字符串"calc", 继续向下执行 call ebp,此时系统弹出计算器,说明此步执行了运行计算器函数。继续运行后程序结束。 ? 3. 静态分析 1. Ida分析 使用Ida打开C:\WINDOWS\system32\MSCOMCTL.OCX,查看地址0x275C8A0A所在的函数(从地址向上找push ebp),找到函数sub_275c89c7,分析该函数的代码:
在进入函数sub_275C876D之前堆栈还剩0x8大小的栈空间,F5转化为C伪代码如下:
从代码中看出,没有对输入的字符串进行限制大小,跟进sub_275C876D函数查看
2. 补丁Diff 用Ida打开修复后的MSCOMCTL.ocx查看,修复函数为sub_275D0076,要求长度必须等于8,否则退出程序。
四、缓解措施
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/29 9:49:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |