我想通过这个独立的研究http://security.cs.rpi.edu/~candej2/syllabus.pdf自己拿起一些基本的漏洞编写和实际上能够从头开始编写一个漏洞。所以…我在看http://security.cs.rpi.edu/~candej2/kernel/trivial_sploit.c和http://security.cs.rpi.edu/~candej2/kernel/trivial.c,并试图理解它是如何工作的。
我试着通过
来运行它# insmod trivial.ko
$ ./exploit
漏洞到达
[+] mapped 0x31337000
然后在我的VM(我设置了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
为什么会这样?
我发现了——是SMEP。我可以通过添加nosmep作为启动参数来禁用它