千家信息网

如何进行Windows提权工具兼容性BUG定位及修复

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇文章给大家分享的是有关如何进行Windows提权工具兼容性BUG定位及修复,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、背景介绍
千家信息网最后更新 2026年10月31日如何进行Windows提权工具兼容性BUG定位及修复

本篇文章给大家分享的是有关如何进行Windows提权工具兼容性BUG定位及修复,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一、背景介绍:

2018年5月微软发布了针对Windows操作系统内核组件漏洞(CVE-2018-8210)的补丁,该漏洞影响多个版本的操作系统,成功利用漏洞可使得普通应用程序以内核权限执行任意代码。

笔者在6月对该漏洞进行分析并发布了漏洞分析和漏洞利用文章(地址),文中同时附带了一份提权工具,支持WinXP、Win2003、Win7、Win2008等系统。后有网友回帖表示在Win7 x86系统下该利用工具无效,经调试确认提权工具确实存在部分兼容性问题。本文将针对该问题进行补充说明,解决存在的兼容性问题。

CVE-2018-8120为缓冲区溢出漏洞,可造成内核任意地址写入。 前文中漏洞利用工具通过触发漏洞,对内核服务函数指针表进行修改,替换为一段修改当前进程Token的ShellCode地址。

二、 问题定位:

经测试在Win7 x86确实无法实现提权,现进行问题定位。设置双机调试内核环境,在关键的位置设置断点,进行调试确认问题的原因。

漏洞利用工具调试

首先设置双机调试环境,虚拟机安装Win7 x86,真机安装WinDbg进行内核调试,在win32k! SetImeInfoEx ()设置断点,查看提权工具是否可以成功调用漏洞函数。

确认是可以成功调用SetImeInfoEx()的,通过IDA反汇编查看该版本的SetImeInfoEx()函数确认漏洞存在。

在SetImeInfoEx()函数进行单步跟踪,确认是否可以触发漏洞

经过单步跟踪,发现可以触发SetImeInfoEx()函数存在的缓冲区溢出漏洞,成功修改了指定的内存数据。

漏洞利用工具通过覆盖GDI内核对象关键字段,实现任意内核地址读写。继续执行漏洞利用工具,检查是否成功修改内核服务函数指针表HalDispatchTable。

进一步进行查看发现,漏洞利用程序计算的HalDispatchTable内存地址并不正确,导致漏洞利用程序没有成功修改函数指针,提权ShellCode也就没有得以执行。

NtQueryIntervalProfile()和HalDispatchTable

我们说明一下为什么修改HalDispatchTable后,可以执行ShellCode。NtQueryIntervalProfile()是Ntdll.dll中导出的未公开的系统调用.它调用内核可执行程序ntosknl.exe导出的KeQueryIntervalProfile()函数.如果我们反汇编这个函数,可看到如下:

位于nt!HalDispatchTable+0x4地址上的函数会被KeQueryIntervalProfile()调用(看红色方框).所以如果我们覆盖那个地址上的指针-也就是说HalDispatchTable中的第二个指针-带有我们ShellCode地址;然后我们调用函数NtQueryIntervalProfile(),将执行我们的ShellCode。

三、解决问题:

前面已经定位到问题,由于没有正确的修改系统服务表的函数指针,导致提权的ShellCode没有执行。现在的问题是找出原先计算过程中为什么会出错,导致没有计算出正确的地址。

如何计算HalDispatchTable表地址

HalDispatchTable由NT内核文件导出,获取该表地址只需要通过GetProcAddress()搜索NT内核文件导出表即可,不过该函数在用户态下,无法对内核模块进行搜索。

在我们的漏洞利用工具中,计算HalDispatchTable表主要是函数leakHal()函数完成的,下面看看该函数的流程:

该函数首先通过EnumDeviceDrivers()获取到ntoskrnl.exe模块的运行时基址,之后在用户态加载ntoskrnl.exe并搜索HalDispatchTable表的导出地址,程序使用真实导出地址减去模块基地址,获得了该表相对于模块基地址的偏移值。最后使用第一步获取的ntoskrnl.exe的运行时基地址加上上面计算的偏移值,得出内核中HalDispatchTable表的内存地址。

NT内核文件之ntoskrnl.exe

NT内核文件是Windows的内核关键组件,通常是指可执行文件ntoskrnl.exe。但是微软根据当前CPU的核心数量以及PAE开启状态,加载不同的内核可执行文件。

如上图所示,系统根据当前处理器的工作模式,加载不同的内核文件。

解决方案

由于原先的代码在计算HalDispatchTable表的时候,没有考虑到微软针对CPU设置加载不同版本内核组件的问题,导致在部分系统上无法成功修改函数指针。

在代码中加入检测CPU设置的代码,根据具体的设置,判断内核所加载的NT内核组件,并计算HalDispatchTable的真实内存地址即可。下面是补充的代码:

在原先的leakHal()代码加入了DeteckKernel()函数, 该函数检测CPU数量和PAE开启状况,返回系统可能加载的内核组件名称。后续程序按原定的流程,加载该内核组件,获取HalDispatchTable表的内存地址并修改。

最后调用NtQueryIntervalProfile()函数,我们的ShellCode将以内核权限执行,以替换Token的方式进行提权。

以上就是如何进行Windows提权工具兼容性BUG定位及修复,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

内核 函数 漏洞 地址 工具 问题 系统 成功 指针 文件 代码 程序 组件 定位 内存 兼容性 模块 不同 关键 版本 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 山东特亿宝互联网科技有限公司 广州百单互联网科技有限公司 深圳恒合互联网络科技有限公司 金融科技还是互联网 喔噻互联网科技 互联网科技集团 互联网科技小额贷款 互联网金融 科技创新 互联网前沿科技 新华互联网科技校企合作 江苏南京365互联网科技 速维有品互联网信息科技(苏州)有限公司 互联网科技扶贫时间 亳州好赞互联网科技有限公司 特约风豹互联网科技为什么扣费 互联网金融科技名词解释 中科明德北京互联网科技 伊宁互联网科技做什么的 领航科技大厦互联网公司 盐城市攀科互联网科技有限公司 互联网科技公司的优势 金融科技创新监管互联网金融 万达互联网科技 中盈科技互联网信息有限公司 互联网金融中的现代科技 互联网科技公司实习生 畅思互联网科技 陕西云淼互联网科技公司 普陀区互联网教育科技管理办法 广东猫王互联网科技有限公司电话
0