【问题标题】:What is "Unable to handle kernel paging request at 00000000313337000"什么是“无法在 00000000313337000 处处理内核分页请求”
【发布时间】:2015-06-03 06:23:32
【问题描述】:

我想自己完成这项独立研究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,并试图了解它是如何工作的。

我尝试通过这样做来运行它

# 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


【解决方案1】:

我发现 - 它是 SMEP。我可以通过添加 nosmep 作为启动参数来禁用它

【讨论】:

    猜你喜欢
    • 2015-01-11
    • 2019-02-17
    • 2016-11-06
    • 2012-01-04
    • 1970-01-01
    • 2014-08-14
    • 2018-03-17
    • 1970-01-01
    • 2013-09-10
    相关资源
    最近更新 更多