Eu escrevi um programa que chama setuid(0)
e execve("/bin/bash",NULL,NULL)
.
Então eu fiz chown root:root a.out && chmod +s a.out
Quando executo ./a.out
, recebo um shell raiz. No entanto, quando faço gdb a.out
isso, inicia o processo como usuário normal e inicia um shell de usuário.
Então ... posso depurar um programa raiz setuid?
gdbserver
como root e conectar-se a ele como um usuário normal. Pelo seu comentário, parece que você não conseguiu fazê-lo da maneira mais simples (executando o gdb como root), mas eu não entendo o que deu errado, por isso não posso ajudar.Aqui está uma maneira de iniciar o processo em um estado parado, se você desejar. Use um script bash fazendo:
Faça essa execução em segundo plano.
Em seguida, começar
gdb
, e anexar ao pid que foi impresso.Você precisará percorrer o
exec
comando comgdb
, mas poderá depurar desde o início.fonte