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
admin
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
位,而admin用户对usermode shellcode具有执行权限。 我尝试将shellcode实施为exploit(.exe)函数,因此将其放置在代码段中(它可能具有执行特权),但是相同(在PXE级别中未设置
E
)并崩溃尽管!vad
命令输出EXECUTE_WRITECOPY
。 我检查了
ProcessMitigationPolicy
的ProhibitDynamicCode
设置为0,所以我认为这不是问题。 最近你们在编写内核漏洞利用程序时如何执行shellcode?
(仅供参考,我已通过内核ROP禁用了SMEP,SMAP)。
#1 楼
到目前为止,我发现的是,根据英特尔手册,即使SMEP
位为0,如果在处理页表的过程中有任何条目设置了execute disable
位,也不会执行。从标准用户(中等IL)分配RWX内存时就是这种情况。通过在内核中映射可执行内存并在其中复制shellcode来利用漏洞。
评论
普通用户可能会遇到SMEP问题,因为CR4寄存器已更新,返回任何有效的用户区代码都会导致系统崩溃。从这种意义上说,即使CR4寄存器中的SMEP位被清除,为什么普通用户也不会禁用SMEP?