快捷搜索:  网络  后门  CVE  渗透  木马  扫描  黑客  as

关于CVE-2018-8120的最新Windows提权漏洞阐发

1、违景先容

5月中旬ESET表露了其拿获的PDF文档样本中的两枚0-day漏洞,其中包含针对Windows体系的内核提权漏洞。该漏洞的漏洞编号为CVE-2018-8120,Windows已经提供安全更新修复此安全漏洞。天融信阿尔法实验室将以Windows Server 2003 32位体系为目标,具体先容该漏洞成因、怎么样触发漏洞、和怎么样使用该漏洞制造“内陆应用程序权限抬举”工具。

经验证,诸多版本的Windows体系均存在该漏洞,文末同时附带一份行使该漏洞制造的提权工具,以供学习。经测试该工具支持Win2003 x32/x6四、WinXP x32、Win7 x32/x64, Win2008 x32/64。

image.png

1.1 漏洞描摹

部分版本Windows体系win32k.sys组件的NtUserSetImeInfoEx()体系服务函数内部未验证内查对象中的空指针对象,普通应用程序可行使该空指针漏洞以内核权限执行任意代码。

1.2 受影响的体系版本

下列软件版本受到影响。未列出的版本要么超过其支持性命周期,要么不受影响。要确定软件版本或版本的支持性命周期,请查阅Microsoft支持性命周期。

Windows 7 for 32-bit Systems Service Pack 1  

Windows 7 for x64-based Systems Service Pack 1      

Windows Server 2008 for 32-bit Systems Service Pack 2

Windows Server 2008 for 32-bit Systems Service Pack 2

Windows Server 2008 for Itanium-Based Systems ServicePack 2

Windows Server 2008 for x64-based Systems Service Pack 2

Windows Server 2008 for x64-based Systems Service Pack 2

Windows Server 2008 R2 for Itanium-Based Systems ServicePack 1

Windows Server 2008 R2 for x64-based Systems ServicePack 1

Windows Server 2008 R2 for x64-based Systems ServicePack 1

1.3 漏洞编号

CVE-2018-8120

二、漏洞细节

2.1漏洞地位及形成缘故起因

漏洞函数位于win32k.sys模块的SetImeInfoEx() 函数, 该函数在使用一个内查对象的字段之前并没有进行是否为空的判定,当该值为空时,函数直接读取零地址内存。要是在当前进程环境中没有映照零页面,该函数将触发页面错误异常,导致体系蓝屏发生。

下列是漏洞产生地位的反汇编代码

image.png

可以看到,漏洞地点函数SetImeInfoEx()接收2个参数,漏洞的产生以及参数1的结构体指针有关,下面跟踪一下参数1的来源。win32k!NtUserSetImeInfoEx() 体系服务函数调用了SetImeInfoEx()

image.png

_GetProcessWindowStation()返归当前进程的WindowStation内查对象, 当做参数1调用SetImeInfoEx()。下列是WindowStation内查对象的内存结构

image.png

程序可以通过体系提供的接口CreateWindowStation()以及SetProcessWindowStation(),新建一个新的WindowStation对象并以及当前进程关联起来,值得注意的是,使用CreateWindowStation() 新建的WindowStation对象其偏移0×14地位的spklList字段的值默认是零。

根据SetImeInfoEx()函数的流程,当WindowStation->spklList字段为0,函数继续执行将触发0地址走访异常。

2.2漏洞触发验证

前文已经先容了漏洞地点地位,下面编写漏洞测试代码,测试该漏洞是否能够触发体系蓝屏。

image.png

NtUserSetImeInfoEx()体系服务函数未导出,需要本人在用户进程中调用该体系服务函数,以执行漏洞函数SetImeInfoEx()。

image.png

其中SyscallIndex的计算,根据体系ShadowSSDT表导出序号计算。

image.png

编译生成poc,最先执行

image.png

image.png

体系蓝屏,可以发现错误产生地位为0xBF91B399,下面在IDA中查看对应地址的指令,恰是前文指出的SetImeInfoEx()中针对pWindowStation->spklList字段进行内存走访的代码。

image.png

3、漏洞行使

3.1漏洞行使之任意代码执行

由于SetImeInfoEx()没有正确的处理内存中的空指针对象, 普通应用程序可行使该漏洞以体系权限执行任意代码,下面将具体先容怎么样在该漏洞现场完成任意代码执行。

已知漏洞产生的缘故起因是零地址内存走访背例,要是在漏洞函数运行的进程中,零地址处的内存分页实现映照,则函数将继续执行。下面继续看看函数要是继续运行,会发生什么情形。

image.png

如上图所示,漏洞产生函数后续执行过程中会执行内存拷贝,且拷贝源来自于参数2,属于用户可控内容。要是拷贝目标v4可控,则可以完成任意内存地址写入(且漏洞函数运行在内核权限, 内核空间与用户空间内存均有权限读写)。至此,要是可以完成任意内存地址写入,则可以通过笼盖体系服务函数指针的方式, 完成任意代码执行

现在的目标是使得拷贝目标v4可控,已知v4来自spklList+0x2C,当spklList为零,而零地址分页内存又偏偏被应用程序映照,一来SetImeInfoEx()可以继续执行不触发异常,二来也是v4是可控的。

通过内核未导出函数可以在部分Windows 体系上成功映照零地址分页的内存,黑客工具,函数原型所示

image.png

映照零地址分页内存后,可以在该地址上进行内查对象的组织,以餍足SetImeInfoEx()函数的检查, 通过漏洞函数的memcpy操作笼盖症结体系服务函数指针。 改造漏洞验证代码,尝试笼盖ntoskrnl!HalDispatchTable表中第二项的hal!HaliQuerySystemInformation() 函数指针,NtQueryIntervalProfile()函数在运行过程中会从HalDispatchTable表中调用该函数。使得用户程序在调用体系函数NtQueryIntervalProfile()的时辰,执行由应用程序设定的ShellCode。

image.png

image.png

终极验证该代码不能成功笼盖预设的函数指针,缘故起因很简单。目标地址0x8088e07c,没法通过漏洞函数的第二个判定,地位以下图所示

image.png

起首直接如许触发漏洞笼盖该函数指针表0x15C字节大小,造成影响较大,二来由于漏洞函数本身的制约,挑选合适的笼盖地位也比较难题, 下面简要先容一种流行的要领,用来协助我们进行精准的笼盖。

行使Bitmap内查对象中的pvScan0字段,进行的任意内存地址读写。通过体系API SetBitMap()以及GetBitMap()可以完成指定地址写入/读取功能。该要领已有文章进行具体的阐发,下面附一篇文章链接读者可以去查阅,这里再也不赘述。

https://bbs.pediy.com/thread-225436.htm

下面修改漏洞验证代码,起首行使漏洞笼盖预先创建的BitMap内查对象, 接着再使用BitMap内查对象进行精准笼盖。完成函数指针笼盖,下列是加入使用BitMap进行精准笼盖的代码。

image.png

image.png

成功的笼盖指定的函数指针,应用程序接着调用该体系服务函数接口,操作体系就会执行我们设定的Shellcode,下面是一段使用SYSTEM进程 EPROCESS结构的Token替代当前进程Token的代码,执行过该代码后,本进程具有以及SYSTEM进程同样的权限。

image.png

在替代当前进程EPROCESS结构中Token标识后,当前进程后续创建的进程均为SYSTEM权限的进程,成功进行权限抬举获得SYSTEM权限。

3.2 漏洞行使实例-提权工具

本文演示之漏洞行使代码取自GitHub 谢谢作者@unamer。 该作者开源的代码包含了一份针对Win7及Win 2008体系的提权工具。

笔者根据该代码做了部分修改,增长了针对Windows 2003 sp2(x32 x64)及Windows XP sp2 x32体系的提权支持。主若是漏洞行使代码中自行调用了体系内核服务函数,不同体系其体系服务调用号并不一致。同时还修改了部分结构体偏移,以支持Win2003以及WinXP。在WinXP x64体系上, 由于NtUserSetImeInfoEx() 中对win32k!gpsi结构中标志位进行验证而未能执行含有漏洞的代码,故未能成功行使该漏洞。

修改后的漏洞行使工具源码及Bin下载地址以下:

https://github.com/alpha1ab/CVE-2018-8120

4、修复建议

目前微软在2018年蒲月的安全更新中已经包含了针对该漏洞的补丁程序,装置使用即可避免受到该漏洞的影响。

漏洞修复程序下载地址:

https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2018-8120

* alphalab,转载注明来自

您可能还会对下面的文章感兴趣: