我过去曾针对用户级进程进行过缓冲区溢出攻击。但是,如果我尝试溢出易受攻击的内核模块的缓冲区,这似乎不起作用。这就是我所做的:
有一个易受攻击的内核模块,我可以将其作为文件打开并对其进行读/写。写操作是在没有边界检查的情况下完成的。所以我做了一个写操作并溢出缓冲区并将返回地址覆盖为具有我的 shellcode 的环境变量的地址。但是出了点问题。内核崩溃,重新启动后我打开 /var/log/messages 并发现 eip 正确指向我覆盖的地址。但是它仍然崩溃说“无法处理虚拟地址处的内核空指针取消引用”有什么原因会发生这种情况吗?为什么不将控件重定向到覆盖的返回地址?
注意:我在 Redhat Enterprise linux 上运行了这个,并关闭了 exec-shield 和 ASLR。