gdb 可以调试 suid root 程序吗?

jyz*_*jyz 17 debugging setuid gdb

我写了一个程序,调用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 程序吗?

Gil*_*il' 23

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

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

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


小智 8

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

echo $BASHPID; kill -STOP $BASHPID; exec sudo -u unpriviledged_user -g the_group_if_not_primary command
Run Code Online (Sandbox Code Playgroud)

让它在后台运行。

然后开始gdb,并附加到打印的pid。

您必须使用 单步执行exec命令gdb,但您可以从一开始就进行调试。