Ho scritto il codice:
// a.c
#include <stdlib.h>
int main () {
system("/bin/sh");
return 0;
}
compilato con il comando:
gcc a.c -o a.out
aggiunto bit setuid su di esso:
sudo chown root.root a.out
sudo chmod 4755 a.out
Su Ubuntu 14.04, quando corro come utente generico, ho ottenuto il privilegio di root.
ma su Ubuntu 16.04, ho ancora la shell dell'utente corrente.
Perché è diverso?
system("bash -p")
viene eseguito insh -c "bash -p"
modo che i privilegi siano già stati eliminati quandobash
viene eseguito.