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 外部启动该程序,在进入麻烦的部分之前以某种方式暂停它,以及attach
Gdb 内部的进程(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
,但您将能够从一开始就进行调试。