函数处理时,没有对对象类型进行严格检查,导致类型混淆。
反汇编TriggerTypeConfusion函数可以看到,先调用ExAllocatePoolWithTag申请了8字节的非分页内存空间,然后调用ProbForRead验证用户缓冲区,之后就将用户缓冲区的内容复制到申请的非分页内存空间中,而未进行类型验证,然后TypeConfusionObjectInitializer中会执行 Callback(): Callback()是输入缓冲区的第几个字节呢?我们查看汇编代码就知道是从第4字节开始: 那么利用方法很简单,我们就将用户缓冲区的大小设置为8,并将第4字节开始处赋值为shellcode的地址即可。
8字节
Callback()
Callback()是输入缓冲区的第几个字节呢?
4
[注意]看雪招聘,专注安全领域的专业人才平台!