我有一个易受攻击的Linux内核模块(32位),我可以成功地利用该模块,并从中获得了特权。基本上,我的漏洞使用一个ROP链来禁用SMEP,并直接跳转到我在userland映射的外壳代码。我在userland的外壳代码调用commit_creds(prepare_kernel_creds(0));
并尝试返回到我的userland代码。
现在,我不明白如何从内核模式返回到用户模式。有几篇文章指出,我应该使用iret
程序集指令返回用户模式.显然,我在外壳代码之后插入了一个iret
,但它似乎不起作用。
我写到一个设备文件,并从调用跟踪:
? vfs_write
? SyS_write
? do_fast_syscall_32
? entry_SYSENTER_32
我注意到这是一个快速的系统调用,它必须通过sysexit
指令返回。
现在,如何在不惊扰内核的情况下返回用户地呢?我需要知道我需要执行哪个调用( iret
/ sysexit
),以及如何干净地执行它。
(我查阅了英特尔的手册和其他一些资源,但到目前为止对我没有什么帮助。)
发布于 2018-01-11 18:57:16
请阅读call_usermodehelper_setup()和call_usermodehelper_exec()。使用这些调用,您可以直接从内核执行代码。
示例:
https://security.stackexchange.com/questions/177339
复制相似问题