从 Windows 内核 (Win10) 返回用户模式 ​​shellcode

逆向工程 开发 外壳代码 视窗 10
2021-07-08 11:31:00

我编写了一个内核漏洞利用(针对最新的 Win10 64 位),它执行(或从内核返回)令牌窃取 shellcode,它被放置在用户空间的 VirtulAlloc 内存中。

问题是,当漏洞由管理员用户执行时,它可以正常工作,但如果由普通用户(中等完整性)执行,它会崩溃ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY (fc)

当我检查用户模式 ​​shellcode 内存的权限时,

(标准用户)

PXE at FFFF8542A150A010    PPE at FFFF8542A1402DF0    PDE at FFFF8542805BECA0    PTE at FFFF8500B7D94400
contains 8A000000269B1867  contains 0A0000001C4F2867  contains 0A0000002673C867  contains 0000000032E84025
pfn 269b1     ---DA--UW-V  pfn 1c4f2     ---DA--UWEV  pfn 2673c     ---DA--UWEV  pfn 32e84     ----A--UREV

在管理员状态下

PXE at FFFF8944A2512028    PPE at FFFF8944A2405E48    PDE at FFFF894480BC9F28    PTE at FFFF8901793E5800
contains 0A000000060BD867  contains 0A0000003593E867  contains 0A0000000FBAB867  contains 000000001DFF4825
pfn 60bd      ---DA--UWEV  pfn 3593e     ---DA--UWEV  pfn fbab      ---DA--UWEV  pfn 1dff4     ----A--UREV

区别在于 PXE 级别,没有E为标准用户设置位,而管理员用户对用户模式 ​​shellcode 具有执行权限。

我尝试将shellcode作为exploit(.exe)的函数实现,因此它被放置在代码段中(它可能具有执行权限),但它是相同的(E在PXE级别没有设置)并且虽然!vad命令输出崩溃EXECUTE_WRITECOPY

我检查过ProcessMitigationPolicy'sProhibitDynamicCode设置为 0,所以我不认为这是问题所在。

这些天,你们在编写内核漏洞时是如何执行 shellcode 的?(仅供参考,我已通过内核 ROP 禁用了 SMEP、SMAP)。

提前致谢!

1个回答

直到现在我发现根据Intel手册,即使SMEP位为0,如果在通过页表的过程中任何条目execute disable设置了位,它也不会执行。从标准用户(中等 IL)分配 RWX 内存时就是这种情况。

我不知道这是我的测试环境的问题还是某种缓解措施,但设法通过在内核中映射可执行内存并将 shellcode 复制到那里来完成编写漏洞利用。