CVE-2018-2883分析

参考链接:https://bbs.ichunqiu.com/thread-9720-1-1.html

实验环境:

Win7 64

漏洞程序:

Adobe Reader9.3.0

漏洞原因:

漏洞原因在cooltype.dll文件中,由strcat调用产生的栈溢出漏洞
	strcat(dst,src)函数,由于dst的第一个字符变为00,因此连接时是将src直接复制到dst所在位置。而src特别长,导致溢出

漏洞利用原理:

由于strcat()之后程序将调用大于dst且小于src空间的某处,而一旦src而修改,则可将其修改为shellcode地址或者ROP的地址,进行漏洞利用。

实验操作:

(探究从哪里执行的exploit?)

1、打开程序,OD附加,ctrl+e来到调用cooltype.dll后,双击进入
在这里插入图片描述
2、点击中文搜索引擎->智能搜索,搜索字符串sing,来到strcat函数附近(注意,这里选择第二次搜索得到的sing,因为有多处调用sing,每次不同)
在这里插入图片描述
3、在0x6657DC98处下断点,点击运行。用Reader9.3打开msf文件,则程序在该断点处断下。
在这里插入图片描述
此时eax为strcat第二个参数的地址,为0x06024D0C,查看数据窗口发现eax的长度为573个字节

4、单步继续,查看strcat第二个参数的位置,此时eax=0x0036DE30
在这里插入图片描述
5、单步继续,执行mov byte ptr ss:[ebp],0,由于此时ebp=eax,因此将eax的第一个bit变为0
在这里插入图片描述
因此执行strcat后,src(0x06024d0c)将直接复制到dst(0x0036de30)位置上

思考一:是在strcat执行完之后执行exploit的吗?
6、此时查看右下角堆栈窗口
在这里插入图片描述
如果是strcat执行完之后被覆盖返回地址进而执行exploit,则0x0036ddd8将被覆盖。但是不可能,因为0x0036ddd8小于0x0036de30
此时选中eax右键堆栈窗口跟随,发现返回地址距离eax有7个内存单元。
在这里插入图片描述
那么是什么时候漏洞被利用呢?
7、单步F8继续,发现当执行到0x67e6dda8时,出现异常,程序退出(正常情况下应该是calc.exe被弹出,但是我这里是退出)。
在这里插入图片描述
那么猜想会不会这个函数的返回地址被覆盖呢?但是不可能,因为他们返回地址处0x0036ddd8位置处,而dst处于0x0036de30比它大,因此不可能被覆盖。那么只有可能是该函数的子函数发生了异常。

8、单步F7进入,跟踪。
在这里插入图片描述
同理发现在0x67E46C0E处的函数发生了异常,而此时esp=0036d6c8依然小于dst因此,异常也应该发生在这个函数的子函数内。

8、F7跟进
在这里插入图片描述
同理,在0x674baf9处程序退出,说明是该函数的子函数发生了异常。

此时,查看SEH链表为
在这里插入图片描述

9、F7跟进
在这里插入图片描述
发现执行到这儿的时候,程序又崩溃退出了,说明是该函数的子函数导致了异常。

10、F7跟进
在这里插入图片描述
leave指令=mov esp,ebp pop ebp,因此执行完leave指令后esp=ebp-4=0x0036de38,刚好是dst=0x0036de30后面的第3个内存单元!!!

此时,查看seh
在这里插入图片描述
发现并没有改变,说明exploit并不是通过覆盖SEH来进行exploit的!而是通过上步调用了call[eax],而eax刚好是dst的第3个栈内存单元!因此如果dst可控就能进行exploit!!

11、单步继续
在这里插入图片描述
果然程序是执行0x0036de38处的位置了!

12、单步继续,开始执行ROP pop esp retn
在这里插入图片描述
单步继续,查看堆栈窗口
在这里插入图片描述

最后验证一下是否如此

重新运行程序,OD载入,来到第二次call [eax]处。对EAX右键数据窗口和堆栈窗口跟随,发现数据相同!

在这里插入图片描述
注意这里strcat(dst,src)的地址会变化,此次dst=0x0025DCF8,而此时eax=0x0025DEF0,eax-dst=504<573,因此只要将src的505~508位置改为shellcode的地址即可。这里将其改为ROP的地址了!
因此shellcode构造如下:
xxxx+xxxx+xxxx+0c0c0c0c+……+ROP(0x4a80cb38)
在这里插入图片描述
接着跳转到
在这里插入图片描述
此时
在这里插入图片描述
接着执行0x0c0c0c0c中的内容了!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值