giovedì 23 febbraio 2012

hes2010 level1 writeup

Dopo molti tentativi andati male ho finalmente risolto il livello 1, loggato come george... Obiettivo prendere la password di elaine... Ogni utente ha le stesse impostazioni in quanto a cartelle, quindi andando dentro a /home/elaine/bin/ troviamo due file... Un cronjob che ci dice che il file perl presente dentro alla cartella viene eseguito automaticamente ogni 5 minuti... Il file perl ha questo codice:


Come si può notare l'utente elaine odia george(come fa @StevenVanAcker a pensare queste storie io non lo so, ancora ricordo la storia dell'abraxas :D) e quindi con questo script cancella regolarmente ogni file dentro /var/tmp... Ed appunto qui dentro c'è la cartella george... In perl con la funzione system si possono richiamare comandi bash, ed infatti il primo comando è un semplice find... Cerca dentro la cartella /var/tmp/george ogni file(-type f) con permessi 777 (-perm 777)  e memorizza la path completa di questi file dentro $filename... Poi per ogni linea in $filename fa due cose(evitando di descrivere tutto), print il nome esteso del file ed ancora con la funzione system rimuove il file... Proprio qua sta la vulnerabilità...

Non avendo previsto un sistema di filtri su $filename, si può pensare di usare | per concatenare un comando dentro al nome... Io come al solito uso python, perchè è il più semplice da utilizzare secondo la mia opinione:


Ho evidenziato il comando come bash... Quello che andiamo a fare è dare alla cartella i permessi 777, creare un file vuoto con quel nome e dare al file i permessi 777... La vulnerabilità appunto sta nel nome del file... Il comando dentro $(...) dice di richiamare l'interprete python ed eseguire i comandi fra "... import binascii,os serve per avere a disposizione i comandi os.system(l'equivalente di system in perl) e binascii.unhexlify che è una funzione che converte da hex ad ascii... Quel numero infatti convertito è semplicemente un cat /etc/pass/elaine > /tmp/file... Questo significa che quando il cron richiamerà il cronjob, eseguirà il perl come utente elaine e quindi potrà leggere il file /etc/pass/elaine... E ci creerà il file /tmp/file che conterrà al suo interno la password cercata...

All'inizio cercavo di passare i comandi senza ricorrere al bash, ma incontravo diversi problemi... Gli slash non si possono usare all'interno del nome, in più non eseguiva ciò che volevo... Alla fine la scelta dell'hex è stata quella vincente...

Nessun commento: