Debugging
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 身份執行,則只能調試 setuid 或 setgid 程序。核心不允許您呼叫
ptrace
以額外權限執行的程序。如果是這樣,您將能夠使程序執行任何操作,這實際上意味著您可以通過呼叫調試器來執行 root shell/bin/su
。如果您以 root 身份執行 Gdb,您將能夠執行您的程序,但您只能在以 root 身份執行時觀察其行為。
如果您需要在程序不是由 root 啟動時對其進行調試,請在 Gdb 外部啟動程序,使其在進入麻煩部分之前以某種方式暫停,以及
attach
Gdb 內部的程序(at 1234
其中 1234 是程序 ID)。