CVE | 您所在的位置:网站首页 › win10提权system › CVE |
Part4、漏洞分析 CClfsBaseFilePersisted::LoadContainerQ函数的第215行判断_CLFS_CONTAINER_CONTEXT结构的cidQueue字段值是否为-1,为-1时则调用CClfsBaseFilePersisted::RemoveContainer函数。 CClfsBaseFilePersisted::RemoveContainer函数的第56行调用CClfsBaseFilePersisted::FlushImage函数处理文件数据,当结果大于等于0时,取_CLFS_CONTAINER_CONTEXT的pCaontainer字段值,并调用相关函数。 CClfsBaseFilePersisted::FlushImage函数第8行调用了CClfsBaseFilePersisted::WriteMetadataBlock函数。 CClfsBaseFilePersisted::WriteMetadataBlock函数调用ClfsEncodeBlock和ClfsDecodeBlockjams函数。 ClfsEncodeBlock调用ClfsEncodeBlockPrivate函数处理数据。 ClfsEncodeBlockPrivate函数将扇区最后2字节数据写入到签名缓冲区,然后使用生成的签名替换原有的2字节数据。 ClfsDecodeBlockjams调用ClfsDecodeBlockPrivate函数处理数据。 ClfsDecodeBlockPrivate函数将签名缓冲区数据写回扇区最后2字节,但缓冲区内的数据并未进行处理。 漏洞利用过程: 1、构造日志文件,使_CLFS_CONTAINER_CONTEXT结构的cidQueue字段值为-1,pCaontainer字段值为代码地址,签名缓冲区偏移指向pCaontainer所在地址。 2、调用CreateLogFile API打开已有的日志文件,此时会调用ClfsDecodeBlockPrivate函数,将签名缓冲区数据写回到扇区最后2字节。 3、当_CLFS_CONTAINER_CONTEXT结构的cidQueue字段值为-1时,会调用CClfsBaseFilePersisted::RemoveContainer函数。 4、RemoveContainer函数调用CClfsBaseFilePersisted::FlushImage函数将扇区最后2字节写入到pCaontainer字段。 5、当RemoveContainer函数调用完FlushImage函数后,pCaontainer值被替换为指定的代码地址,随后会将该地址作为虚表指针并调用相关函数。因为pCaontainer是可控的,因此可以执行任意构造的代码,从而实现权限提升。 Part5、修复建议 根据系统安装链接内相应补丁。 原文来源:安帝Andisec返回搜狐,查看更多 |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |