声明
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
No.1
漏洞简介
年3月10日,微软官方公布了一个本地提权漏洞CVE--,根据微软的漏洞描述声称,攻击者在使用低权限用户登录系统后,可以利用该漏洞构造恶意程序直接提权到administrator或者system权限。system是windows所有操作系统中权限 的账户。
No.2
漏洞影响
Windows10for32-bitSystemsWindows10forx64-basedSystemsWindows10Versionfor32-bitSystemsWindows10Versionforx64-basedSystemsWindows10Versionfor32-bitSystemsWindows10VersionforARM64-basedSystemsWindows10Versionforx64-basedSystemsWindows10Versionfor32-bitSystemsWindows10VersionforARM64-basedSystemsWindows10Versionforx64-basedSystemsWindows10Versionfor32-bitSystemsWindows10VersionforARM64-basedSystemsWindows10Versionforx64-basedSystemsWindows10Versionfor32-bitSystemsWindows10VersionforARM64-basedSystemsWindows10Versionforx64-basedSystemsWindows10Versionfor32-bitSystemsWindows10VersionforARM64-basedSystemsWindows10Versionforx64-basedSystemsWindows7for32-bitSystemsServicePack1Windows7forx64-basedSystemsServicePack1Windows8.1for32-bitsystemsWindows8.1forx64-basedsystemsWindowsRT8.1WindowsServerfor32-bitSystemsServicePack2WindowsServerfor32-bitSystemsServicePack2(ServerCoreinstallation)WindowsServerforItanium-BasedSystemsServicePack2WindowsServerforx64-basedSystemsServicePack2WindowsServerforx64-basedSystemsServicePack2(ServerCoreinstallation)WindowsServerR2forItanium-BasedSystemsServicePack1WindowsServerR2forx64-basedSystemsServicePack1WindowsServerR2forx64-basedSystemsServicePack1(ServerCoreinstallation)WindowsServerWindowsServer(ServerCoreinstallation)WindowsServerR2WindowsServerR2(ServerCoreinstallation)WindowsServerWindowsServer(ServerCoreinstallation)WindowsServerWindowsServer(ServerCoreinstallation)WindowsServer,version(ServerCoreInstallation)WindowsServer,version(ServerCoreinstallation)WindowsServer,version(ServerCoreinstallation
No.3
复现过程
漏洞分析
CreateJob()方法在IBackgroundCopyGroup的COldGroupInterface类中实现
由于CFG的存在,看不出什么信息,这个方法调用CreateJobInternal()方法,CreateJobInternal()调用CLockedJobWritePointer::ValidateAccess
CLockedJobWritePointer::ValidateAccess调用了CJob::CheckClientAccess
CheckClientAccess()检查用户token并应用于当前线程的impersonation这个执行流返回CreateJobInternal方法,并调用CJob::GetOldJobExternal返回IBackgroundCopyJob1类型的指针
调用流程
(CLIENT)IBackgroundCopyGroup::CreateJob()
V(SERVER)COldGroupInterface::CreateJob()
__COldGroupInterface::CreateJobInternal()
__CLockedJobWritePointer::ValidateAccess()
__CJob::CheckClientAccess()//Clientimpersonation
__CJob::GetOldJobExternal()//IBackgroundCopyJob1*returned
了解了CreateJob()的实现原理,回到QueryNewJobInterface()方法,如果提供的GUID匹配IID_IBackgroundCopyJob,调用CJob::GetJobExternal,查询新的接口指针调用并返回给客户端。
流程
(CLIENT)IBackgroundCopyGroup::QueryNewJobInterface()
V(SERVER)COldGroupInterface::QueryNewJobInterface()
__CJob::GetJobExternal()//IBackgroundCopyJob*returned
当调用IBackgroundCopyGroup::QueryNewJobInterface()获取一个IBackgroundCopyJob类型的指针时,这个工作是由服务端完成的,而不是RPC客户端。此时可以利用成功。MoveFileEx()调用流程
漏洞验证
poc: