Napisałem program, który wzywa setuid(0)
i execve("/bin/bash",NULL,NULL)
.
Potem zrobiłem chown root:root a.out && chmod +s a.out
Kiedy wykonuję ./a.out
, otrzymuję powłokę roota. Jednak gdy to zrobię gdb a.out
, proces zaczyna się jak zwykły użytkownik i uruchamia powłokę użytkownika.
Więc ... czy mogę debugować program root setuid?
gdbserver
jak root i połączyć się z nim jak zwykły użytkownik. Z twojego komentarza wynika, że nie udało ci się zrobić tego w prosty sposób (uruchamianie gdb jako root), ale nie rozumiem, co poszło nie tak, więc nie mogę pomóc.Oto sposób, aby rozpocząć proces w stanie zatrzymanym, jeśli chcesz. Użyj skryptu bash, wykonując:
Spraw, aby działał w tle.
Następnie zacznij
gdb
i dołącz do wydrukowanego pid.Będziesz musiał wykonać
exec
polecenie za pomocągdb
, ale będziesz mógł debugować od samego początku.źródło