2

我正在开发一个漏洞利用项目,该项目需要我从内核中调用 root shell。在搜索了各种文档和网站后,我了解到唯一的方法是将当前进程提升到 root 权限,然后执行指令来调用 shell。这是因为我们不能简单地从内核调用系统调用。

同样,我遇到了 call commit_creds (prepare_kernel_cred (0));,它可用于授予进程 root 权限。但是,我使用的是 Red Hat Enterprise Linux 4.4 Base,它没有上述调用:

[dmazumd@bn19-62 ~]$ grep commit_cred /proc/kallsyms 
[dmazumd@bn19-62 ~]$ grep _cred /proc/kallsyms 
c0164655 T compute_creds
c01a7cdd t dummy_bprm_apply_creds.....

所以,我的问题是,如何解决这个问题?我知道需要uid将进程的设置为零,这将为其提供 root 权限。AFAIK,uid居住在struct_cred而不是struct_task现在。而且我不知道是否可以在不使用上述任何 API 的情况下直接访问这些结构。是否有任何其他呼吁来实现同样的目标?或者,还有其他方法吗?

PS:我不是要求我的问题的确切答案,任何方向/帮助将不胜感激。

4

2 回答 2

1

澄清一下:您的内核不需要“root权限”。它实际上高于此。您需要的是一个可以拥有特权的进程。

您可以开始查看execve启动流程并执行此操作。

如果你已经运行了一个 shell 并且你处于内核模式,你可以简单地修改( shed.h )uid中的。task_struct

另外,看看这里

于 2012-09-25T03:04:37.417 回答
0

我最终可以通过首先在内核内部将进程提升为 root 状态来实现 root shell。这是通过使用set_user(0)内部定义的 call call 来实现的/proc/kallsyms

iret完成此操作后,该进程将使用并生成一个 shell切换回用户空间。此 shell 具有 root 权限。

于 2012-09-26T07:02:44.867 回答