2015-06-03 52 views
0

我希望自己通过这个独立研究http://security.cs.rpi.edu/~candej2/syllabus.pdf自己学习利用写入的一些基本知识,并且实际上可以从头开始编写漏洞利用。所以...我在看http://security.cs.rpi.edu/~candej2/kernel/trivial_sploit.chttp://security.cs.rpi.edu/~candej2/kernel/trivial.c,并试图了解它是如何工作的。什么是“无法在00000000313337000处理内核寻呼请求”

我试着做

# insmod trivial.ko 
$ ./exploit 

该漏洞得到了

[+] mapped 0x31337000 

然后再在我的虚拟机(我设置kgdboc),我看到

BUG: Unable to handle kernel paging request at 0000000031337000 
IP: [<0000000031337000>] 0x31337000 
PGD 3a89e067 PUD 3aea2067 PMD 3b333067 PTE 31b57067 
last sysfs file: /sys/devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0/block/sda/dev 
KGDB: Waiting for remote debugger 

为什么运行它情况可能如此吗?

+0

可能NX位在mmap'd页面上设置。此外,该漏洞利用似乎是为32位内核编写的,而您正在64位内核上执行它。 –

+0

你知道我可以检查NX位吗?关闭NX位是否与设置PROT_EXEC一样?在mmap调用中设置了PROT_EXEC。我明白'generate_shellcode(char * buf)'函数会生成带有'eax'的程序集,但是我认为在执行任何程序集之前都会出现这个页面错误。 (我会尝试一个32位虚拟机来验证这一点)谢谢! – ackerleytng

+0

在32位系统上尝试过,出现同样的错误。 – ackerleytng

回答

0

我发现了 - 这是SMEP。我可以通过添加nosmep作为引导参数来禁用它。

相关问题