Ich habe ein Programm geschrieben, das setuid(0)
und aufruft execve("/bin/bash",NULL,NULL)
.
Dann habe ich getan chown root:root a.out && chmod +s a.out
Beim Ausführen ./a.out
erhalte ich eine Root-Shell. Wenn ich dies tue gdb a.out
, wird der Prozess jedoch als normaler Benutzer gestartet und eine Benutzer-Shell gestartet.
Also ... kann ich ein setuid-Root-Programm debuggen?
gdbserver
als Root ausführen und als normaler Benutzer eine Verbindung dazu herstellen. Aus Ihrem Kommentar geht hervor, dass Sie es nicht auf einfache Weise geschafft haben (gdb als root ausführen), aber ich verstehe nicht, was schief gelaufen ist, deshalb kann ich nicht helfen.Hier ist eine Möglichkeit, den Prozess im angehaltenen Zustand zu starten. Verwenden Sie ein Bash-Skript, um Folgendes zu tun:
Lass das im Hintergrund laufen.
Starten Sie dann
gdb
und hängen Sie an die PID an, die gedruckt wurde.Sie müssen den
exec
Befehl mit schrittweisegdb
ausführen, können jedoch von Anfang an debuggen.quelle