01

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

  1. privilegi ingiustamente elevati
  2. versione di bash non abbassa i privilegi
  3. path non affidabile

Mitigazioni

  1. disattiviamo SETUID sudo -i chmod u-s /home/flag01/flag01

  2. 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