类型混淆漏洞一般是将数据类型A当做数据类型B来解析引用,这就可能导致非法访问数据从而执行任意代码。
本文通过IE类型混淆漏洞实例和Word类型混淆漏洞实例进行分析,来学习理解类型混淆漏洞原理。
实例一:IE/Edge类型混淆漏洞(CVE-2017-0037)
漏洞原因:函数处理时,没有对对象类型进行严格检查,导致类型混淆。
分析环境: Win7、IE11
分析工具: Windbg、od、IDA Pro
在PoC中定义了一个table,标签中定义了表id为th1,在boom()中引用,然后是setInterval设定事件。
漏洞成因分析:
运行PoC,用OD或Windbg附加并加载运行,出现崩溃,如下图
从崩溃点可以看到eax作为指针,引用了一个无效地址,导致崩溃,而上一条指令是一个call,如下
这个无效的返回值来自这个call,此时我们进行逆推,在这个call处下断点,
ecx作为参数,存放的对象是一个Layout::FlowItem::`vftable虚表
这个值会在Readable函数中引用,如下图