吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5262|回复: 15
收起左侧

[漏洞分析] CVE-2012-0158漏洞分析

[复制链接]
Nattevak 发表于 2022-2-26 10:59
本帖最后由 Nattevak 于 2022-2-26 11:10 编辑

前期
msf的使用Kail中启动Root Terminal Emulator,指令msfconsole启动msf控制台指令search cve-2012-0158查找是否有该漏洞利用程序

1

1

指令info 0查看其序号为0的漏洞详细信息

2

2

指令use 0引用其序号为0的漏洞,需要添加一个payload

3

3

加入一个弹窗的payload,填写样本必要参数生成样本指令show payloads查看payload信息

4

4

此处使用29号payload,exec

5

5

指令set payload+序号设置序号对应的payload

6

6

指令Show options查看payload需要设置的参数

7

7

指令Set CMD calc,设置payload中CMD 的参数为calc,即弹出计算器

8

8

指令exploit生成漏洞利用文件

9

9

指令cp /root/.msf4/local/msf.doc /home/kali/File/将生成的漏洞利用文件拷贝到此目录下

10

10

11

11


漏洞编号 CVE-2012-0158

12

12

1.软件简介
Microsoft Office Word 2003,是一种字处理程序,可使文档的创建、共享和阅读变得更加容易。
2.漏洞成因
CVE-2012-0158漏洞出现在MSCOMCTL.OCX中,由于检查条件错误,导致复制的数据造成栈溢出,从而可构造恶意文档执行任意代码。

分析样本
猜测样本所使用的API
POC弹出了计算机,那么可能调用的API如下:
1.CreateProcess(参数多不是首选)
2.WinExec,导出模块是kernel32.dll,比较常用
3.system,导出模块是ucrtbase.dll,word不一定会加载

验证猜想
在WinExec设置断点,之后运行测试POC

1.1

1.1

程序在WinExec处断下

1.2

1.2

查看堆栈信息,可以看到此时的堆栈信息已经被破坏了,无法找到有用的调用信息

1.3

1.3

函数返回地址为001217c6,已经变成了ESP附近的值

1.4

1.4

指令da 001217e5查看该内存的位置

1.5

1.5

栈回溯查看调用处是否像是ShellCode

1.6

1.6

疑似ShellCode,故再向上查看指令

1.7

1.7

此时已经能大概确认就是shellcode了,为了准确性再验证一下NOP之前的四个字节(27583c30)是什么指令

1.8

1.8

可以看到是个jmp esp,那么这里我们已经可以肯定是Shellcode了

查验样本,搜索其是否包含这些OpCode

1.9

1.9

1.10

1.10

此时综合上述分析,已知调用堆栈窗口中无有效信息,栈已被破坏,并且存在JMP ESP指令,那么这是个栈溢出漏洞

1.11

1.11

定位漏洞原因,找出其出问题的模块
*由于之前POC已经将栈溢出了,不好定位原因采用最小样本法,将距离jmp sep向上出现的最近的不同内容的位置开始删除

2.1

2.1

观察样本运行情况
无ShellCode的样本已经崩溃,此时异常偏移不一定就是出错的位置,需要进行调试

2.2

2.2

查看一下堆栈,看看是否能找到有用的信息

2.3

2.3

观察栈里的数据,寻找有用的信息

2.4

2.4

栈中发现了一些之前调用的信息”MSCOMCTL!DllCanUnloadNow+0xc7d”重新调试,并在MSCOMCTL!DllCanUnloadNow+0xc7d位置设置断点进行观察

2.5

2.5

观察栈是否被破坏运行前->运行后

2.6

2.6

2.7

2.7

单步跟踪一下,发现没走两步,esp里面就已经全0了

2.8

2.8

故在这个位置之前就已经溢出了,继续寻找有用的信息在”bp MSCOMCTL!DllGetClassObject+0x41abc”位置设置断点继续观察

2.9

2.9

单步跟踪到这个位置,发现还没有溢出,所以从这里跟进去一下

2.10

2.10

继续跟踪call

2.11

2.11

跟完call发现调用栈突然就变少了。从断下到现在为止并没有遇到一个RET,栈却突然变化了。

2.12

2.12

运行REP MOVSD 指令后堆栈调用突然减少

2.13

2.13

2.14

2.14

REP MOVSD 指令与ECX、ESI、EDI相关,一般栈溢出都是数据过大造成

2.15

2.15

找一下ECX是从哪里赋值的ecx来自 edi

2.16

2.16

edi来自栈[ebp+0x10]

2.17

2.17

使用IDA分析,并定位到刚刚我们找到的问题函数

2.18

2.18

2.19

2.19

此时我们就需要通过栈回溯,找到上一层CALL


2.20

2.20

2.21

2.21

PoC

2.22

2.22


漏洞验证
运行弹出calc的漏洞利用程序,程序在WinExec处断下

2.23

2.23

将程序运行至retn

2.24

2.24

返回之后执行Shellcode,弹出计算器

2.25

2.25


漏洞利用
指令! py mona jmp -r esp -m winword.exe查找所需的jmp esp地址

2.26

2.26

将jmp esp的地址0x30015af5填入POC文件中溢出点位置,加上一些滑板指令,之后再加上Shellcode就完成了。

2.27

2.27

2.28

2.28


免费评分

参与人数 8威望 +2 吾爱币 +110 热心值 +7 收起 理由
LegendSaber + 1 + 1 我很赞同!
CyberAzrael + 1 + 1 我很赞同!
BrightMrW + 1 我很赞同!
fengbolee + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
smile1110 + 3 + 1 666666666666666
willJ + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
云界漫步 + 1 + 1 我很赞同!
timeni + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
lxj2004 发表于 2022-2-26 11:57
提示: 作者被禁止或删除 内容自动屏蔽
小污龟 发表于 2022-2-26 20:26
zy1234 发表于 2022-2-27 09:42
solasafe 发表于 2022-2-28 09:45
大佬逆向牛啊,学习了~
无言Y 发表于 2022-2-28 13:12
感谢分享
likehanhan 发表于 2022-3-11 16:00
可以啊,分析很透彻
纳兰容若 发表于 2022-3-14 11:55
多谢楼主分享
泽翌凉风 发表于 2022-3-14 15:47
我很赞同!
vlinkchen 发表于 2022-3-16 20:00
这个分析不错,谢谢楼主了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 20:14

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表