我编写了一个内核漏洞利用(针对最新的 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)。
提前致谢!