发表于 2018-7-7 14:06

申请ID:Antidote1999


1、申请ID:Antidote1999
2、个人邮箱:antidote1999@sina.com
3、原创技术文章:
0x01 前言
一直在52pojie看帖子,学到了很多知识,感谢大牛们,我是刚刚接触信息安全的菜鸟,现在进行的是二进制漏洞的研究,对汇编,C,Python,php都有一定研究,但是慢慢发现可看的资源太少,所以想申请会员了{:1_908:},看到会员的审核很严格,心里没底,写的不好还望各位大牛见笑!
0x02 一些杂七杂八
因为是刚刚接触信息安全,二进制学习也刚刚开始,所以没有在各大论坛或者一些学习交流的平台有发表很好的技术分析文档。自己还是抱着一颗学习进取的姿态跟各位大佬们学习。所以我就贴一个自己学习过程中自己调漏洞的一个笔记吧,希望大佬们不要鄙视。
0x03 CVE-2010-3333调试笔记

winDBG调试命令lmm可以查看模块信息。
调试环境Windows Xp Sp3 CN (VMWare 12)
调试器IDA Pro   /    Olly Debug   /    WinDbg
漏洞软件Word(Microsoft Office 2003)


1、首先利用WinDbg定位软件崩溃地址:将WinDbg Attach上Word,F5之后回到Word执行权限,打开漏洞POC文件,会出现Error信息,此时可定位程序崩溃地址。


2、利用IDA Pro软件逆向Word的mso.dll模块,定位到上面程序崩溃的地址。


3、发现在函数sub_20E9EB62内。其实这个POC溢出崩溃地点就是memcpy函数的地址,所以可以直接下断点在崩溃的位置,然后看ebp后面的返回地址。
最终找到函数调用。崩溃函数最终返回的是这个函数。

但是很奇怪,这个call才是调用memcpy的地方,但call进去函数之后没有push ebp等操作,然后这个call返回之后也是继续执行,很奇怪一call之后eip自动入栈,但没有相关指令,ESP没改变。(百度:其实,就是call 地址,然后我一直觉得,这个是函数调用,既然是函数调用那么就有新的函数帧栈指针,就是新的EBP,后来才发现,call后面不一定是函数,可能是功能模块或者过程。所以EBP不变)


4、继续跟进这个函数,可以看到在进行rep movs之前,循环复制次数ECX值是018C,打开poc文件我们也能发现这个018C是文件内容,是我们可以控制的。


5、函数循环ECX次,将esi地址的值拷贝到edi所指向的地址空间,此时ebp-edi=10h,所以加上ebp的四个字节,只要复制超过14h个字节就能覆盖返回地址,我们利用jmp esp,作为跳转指针,在内存空间搜索jmp esp,(30DB641B jmp esp)可以得到这个地址。

6、当函数返回后看到,函数先释放了14h字节的栈空间,所以我们将shellcode放置在jmp esp后0x14字节处。但是将这0x14字节全部填为0x90却不能成功执行到返回,总是在memcpy函数返回后跳入另一个函数然后程序崩溃。多次尝试之后发现将这些字节全部填为0,则能够执行到返回。此时我们已经能够完成漏洞的利用。


总结:本次漏洞利用没有什么值得说的地方,就是简单的jmp esp,主要是rtf文件格式的理解,
在接下来构造的POC中主要用到了下面几个属性。
\rtf1-RTF版本
\ansi-支持ANSI字符集
\shp-绘图对象
*\shpinst-图片引用
\sp-绘图对象属性定义
\sn pFragments-定义属性名称,pFragments段是图形的附加部分,属于数组结构,它允许图形包含多个路径和分段,该属性列出图形各个碎片
\sv-定义属性值
RTF分析器正是在解析pFragments属性值时,没有正确计算属性值所占用的空间大小,导致栈溢出漏洞的发生。

0x04 后记
最后还是希望各位大佬们通过,感谢了。

Hmily 发表于 2018-7-9 14:40

过程有些简单,再补充一些技术内容吧,或者等21号开放注册直接来注册。
页: [1]
查看完整版本: 申请ID:Antidote1999