好友
阅读权限30
听众
最后登录1970-1-1
|
本帖最后由 Nattevak 于 2022-2-26 11:10 编辑
前期
msf的使用Kail中启动Root Terminal Emulator,指令msfconsole启动msf控制台指令search cve-2012-0158查找是否有该漏洞利用程序
1
指令info 0查看其序号为0的漏洞详细信息
2
指令use 0引用其序号为0的漏洞,需要添加一个payload
3
加入一个弹窗的payload,填写样本必要参数生成样本指令show payloads查看payload信息
4
此处使用29号payload,exec
5
指令set payload+序号设置序号对应的payload
6
指令Show options查看payload需要设置的参数
7
指令Set CMD calc,设置payload中CMD 的参数为calc,即弹出计算器
8
指令exploit生成漏洞利用文件
9
指令cp /root/.msf4/local/msf.doc /home/kali/File/将生成的漏洞利用文件拷贝到此目录下
10
11
漏洞编号 CVE-2012-0158
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
程序在WinExec处断下
1.2
查看堆栈信息,可以看到此时的堆栈信息已经被破坏了,无法找到有用的调用信息
1.3
函数返回地址为001217c6,已经变成了ESP附近的值
1.4
指令da 001217e5查看该内存的位置
1.5
栈回溯查看调用处是否像是ShellCode
1.6
疑似ShellCode,故再向上查看指令
1.7
此时已经能大概确认就是shellcode了,为了准确性再验证一下NOP之前的四个字节(27583c30)是什么指令
1.8
可以看到是个jmp esp,那么这里我们已经可以肯定是Shellcode了
查验样本,搜索其是否包含这些OpCode
1.9
1.10
此时综合上述分析,已知调用堆栈窗口中无有效信息,栈已被破坏,并且存在JMP ESP指令,那么这是个栈溢出漏洞
1.11
定位漏洞原因,找出其出问题的模块
*由于之前POC已经将栈溢出了,不好定位原因采用最小样本法,将距离jmp sep向上出现的最近的不同内容的位置开始删除
2.1
观察样本运行情况
无ShellCode的样本已经崩溃,此时异常偏移不一定就是出错的位置,需要进行调试
2.2
查看一下堆栈,看看是否能找到有用的信息
2.3
观察栈里的数据,寻找有用的信息
2.4
栈中发现了一些之前调用的信息”MSCOMCTL!DllCanUnloadNow+0xc7d”重新调试,并在MSCOMCTL!DllCanUnloadNow+0xc7d位置设置断点进行观察
2.5
观察栈是否被破坏运行前->运行后
2.6
2.7
单步跟踪一下,发现没走两步,esp里面就已经全0了
2.8
故在这个位置之前就已经溢出了,继续寻找有用的信息在”bp MSCOMCTL!DllGetClassObject+0x41abc”位置设置断点继续观察
2.9
单步跟踪到这个位置,发现还没有溢出,所以从这里跟进去一下
2.10
继续跟踪call
2.11
跟完call发现调用栈突然就变少了。从断下到现在为止并没有遇到一个RET,栈却突然变化了。
2.12
运行REP MOVSD 指令后堆栈调用突然减少
2.13
2.14
REP MOVSD 指令与ECX、ESI、EDI相关,一般栈溢出都是数据过大造成
2.15
找一下ECX是从哪里赋值的ecx来自 edi
2.16
edi来自栈[ebp+0x10]
2.17
使用IDA分析,并定位到刚刚我们找到的问题函数
2.18
2.19
此时我们就需要通过栈回溯,找到上一层CALL
2.20
2.21
PoC
2.22
漏洞验证
运行弹出calc的漏洞利用程序,程序在WinExec处断下
2.23
将程序运行至retn
2.24
返回之后执行Shellcode,弹出计算器
2.25
漏洞利用
指令! py mona jmp -r esp -m winword.exe查找所需的jmp esp地址
2.26
将jmp esp的地址0x30015af5填入POC文件中溢出点位置,加上一些滑板指令,之后再加上Shellcode就完成了。
2.27
2.28
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|