gdb可以调试suid root程序吗?

gdb可以调试suid root程序吗?

setuid(0)我编写了一个调用和的程序execve("/bin/bash",NULL,NULL)

然后我做了chown root:root a.out && chmod +s a.out

当我执行时,./a.out我得到一个 root shell。但是,当我gdb a.out这样做时,它会以普通用户身份启动进程,并启动用户 shell。

那么...我可以调试 setuid root 程序吗?

答案1

如果调试器以 root 身份运行,则只能调试 setuid 或 setgid 程序。内核不会让你调用ptrace在以额外权限运行的程序上。如果确实如此,您将能够使程序执行任何操作,这实际上意味着您可以通过调用/bin/su.

如果您以 root 身份运行 Gdb,您将能够运行您的程序,但您只能在以 root 身份运行时观察其行为。

如果您需要在程序未由 root 启动时对其进行调试,请在 Gdb 外部启动该程序,在进入麻烦的部分之前以某种方式暂停它,以及attachGdb 内部的进程(at 1234其中 1234 是进程 ID)。

答案2

如果您愿意,这里有一种在停止状态下启动该过程的方法。使用 bash 脚本执行以下操作:

echo $BASHPID; kill -STOP $BASHPID; exec sudo -u unpriviledged_user -g the_group_if_not_primary command

使其在后台运行。

然后启动gdb,并附加到打印的 pid。

您必须使用 逐步执行该exec命令gdb,但您将能够从一开始就进行调试。

相关内容