J'ai écrit un programme qui appelle setuid(0)
et execve("/bin/bash",NULL,NULL)
.
Alors j'ai fait chown root:root a.out && chmod +s a.out
Lorsque j'exécute, ./a.out
j'obtiens un shell racine. Cependant, lorsque je le fais, gdb a.out
il démarre le processus en tant qu'utilisateur normal et lance un shell utilisateur.
Alors ... puis-je déboguer un programme racine setuid?
gdbserver
tant que root et vous y connecter en tant qu'utilisateur normal. D'après votre commentaire, il semble que vous n'ayez pas réussi à le faire de la manière la plus simple (en exécutant gdb en tant que root) mais je ne comprends pas ce qui s'est mal passé, donc je ne peux pas m'empêcher.Voici un moyen de démarrer le processus dans un état arrêté si vous le souhaitez. Utilisez un script bash en faisant:
Faites cela en arrière-plan.
Commencez ensuite
gdb
et attachez-le au pid qui a été imprimé.Vous devrez parcourir la
exec
commande avecgdb
, mais vous pourrez déboguer dès le début.la source