【发布时间】:2015-06-03 06:23:32
【问题描述】:
我想自己完成这项独立研究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
然后在我的虚拟机中(我设置了 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
为什么会这样?
【问题讨论】:
-
可能在 mmap 页面上设置了 NX 位。此外,该漏洞利用似乎是为 32 位内核编写的,而您正在 64 位内核上执行它。
-
您知道如何检查 NX 位吗?关闭 NX 位是否与设置 PROT_EXEC 相同? PROT_EXEC 在 mmap 调用中设置。我知道函数
generate_shellcode(char *buf)生成带有eax的程序集,但我认为这个页面错误发生在执行任何程序集之前。 (我会尝试 32 位 VM 来验证这一点)谢谢! -
在 32 位系统上试过,同样的错误。
标签: linux debugging linux-kernel dereference exploit