0x00前言
第三部分讲type confusion(类型混淆)漏洞 这是之前没有接触过的类型的漏洞 基本上无法靠fuzzing挖掘到 只能靠人手工得到 这就要求对操作系统有非常高的造诣了
0x01漏洞原理
它的定义是 当一段代码没有验证对象类型时 并在没有进行类型检查的情况下盲目使用它 进而导致type confusion 导致表达的类型作为一片内存区域 此时将我们的函数指针或数据放入内存之中 就会导致代码执行
函数分析
TriggerTypeConfusion
函数使用了UNION 然后在没有设置回调对象的情况下 就给Status赋值 导致直接使用ObjectType的值 而ObjectType指向恶意代码时就可以利用
1 | NTSTATUS |
1 | typedef struct _KERNEL_TYPE_CONFUSION_OBJECT |
0x02漏洞分析
我们对以下函数下断点
1 | bp HEVD!TriggerTypeConfusion |
运行到图中处 然后查看KernelTypeConfusionObject结构体的内容 其中第二项即为ObjectType的地址 也就是我们shellcode的地址
0x03漏洞利用
对于类型混淆的话需要进一步了解的同学 看这里
这次用的官方的exp 这里顺带说一下 我用本机的vs2019编译的 在编译前更改了这些 好像也不用改 但我还是改了qaq
其实这里exp的话 自己写好些 wjllz师傅就是自己写的 我这边环境还是什么问题就无法提权 也没想纠结太长时间
shellcode
1 | VOID TokenStealingPayloadWin7New() { |
调用
1 | __try { |
成功利用
0x04补丁分析
前面已经说的很清楚了 在安全版本中 已经正确的设置了回调指针 导致无法控制
0x05经验总结
这算是第一次接触到类型混淆漏洞吧 其实这个例子讲的很简答 所以很好利用 最后 感谢wjllz和0x2l师傅!!!