mercoledì 30 novembre 2011

Nebula level01 writeup

Il livello 01 ha un leggerezza nel codice che è sfruttabile tramite il comando export $PATH... La leggerezza sta nell'usare
system("/usr/bin/env echo and now what?");
nel codice... Per comprendere perchè questo livello rientra nel caso dei $PATH weaknesses si deve comprendere come lavora env... Infatti va a ricercare dentro a $PATH il comando echo... Questo comporta che modificando $PATH e scrivendo il proprio echo, compilando con gcc si può eseguire un comando a piacere... Ed è proprio questa la vulnerabilità del codice... Così si può scrivere con poche righe qualcosa del genere:

Basta poco e si può ottenere un comando echo personalizzato... Si compila e si imposta la nuova $PATH e si lancia il flag01 contenuto dentro alla cartella /home/flag01/... Questi i comandi, dentro al file echo.c incollare il codice soprastante:

Penso che il livello 01 sia risolto, anche perchè getflag dice che è corretto...

Nebula level00 writeup

Visto che sono bloccato e non so andare affatto avanti nel wargame Abraxas, ho deciso di trovare un nuovo wargame che mi aiuti ad andare avanti in Abraxas, visto che quest'ultimo è troppo complicato per le mie risorse... Così ho deciso di affiancare ad Abraxas questo Nebula... Sembra anche carino... Per prima cosa si deve prendere l'immagine da qui... L'immagine non viene caricata direttamente da Virtualbox, che mi da errore... Allora io estraggo tutto con 7z, per ottenere il file immagine del disco... Ho eliminato tutto e tenuto solo il file vmdk e l'ovf... Ho modificato l'ovf così:


Copiate questo per avere un ovf funzionante con Virtualbox...Alla fine ho scelto una rete privata, ed ho iniziato il wargame... Si deve prendere dal sito la descrizione del livello, per sapere cosa fare, e per essere certi di averlo fatto nel modo corretto si deve lanciare il comando getflag... Per il primo livello il wargame richiedeva questo:

This level requires you to find a Set User ID program that will run as the "flag00" account. You could also find this by carefully looking in top level directories in / for suspicious looking directories.
Alternatively, look at the find man page.
To access this level, log in as level00 with the password of level00 .
Niente di troppo complicato... Infatti credo che questo livello servisse solo per entrare a far parte del ruxcon ctf, solo per farsi registrare al ctf... Infatti non è un vero livello... Dobbiamo trovare un programma che sia collegato all'account flag00... Logghiamoci tramite ssh con user=level00 e pass=level00, leggere le istruzioni per capire perchè...Troviamo prima tramite il comando
cat /etc/passwd
che l'account flag00 è contraddistinto dall'uid=999...Allora lanciamo il comando
find / -uid 999
e troviamo il file flag00 dentro alla cartella /bin/.../flag00... Lanciamolo e lanciamo pure getflag:
cd /bin/.../flag00

./flag00
getflag
Finiremo così il level00...

mercoledì 16 novembre 2011

Vortex livello 0 writeup

Visto che sono fermo con il livello 4 di abraxas, ho deciso di continuare a divertirmi con qualche altro wargame... Sempre di questo genere qua... Quelli della otherthewire sono molto belli... Quindi ho iniziato con il primo livello, anzi il livello 0... Quello che tutti sanno fare... Non è molto difficile alla fine... Basta ricordarsi due cose di python, cioè come trattare i dati in little endian e come usare le tuple... Niente di impossibile visto che python è semplice da capire... Basta leggere queste due pagine:

 Struct

 Tuple

Con queste due sole letture, e rifacendomi al livello 1 di abraxas(è abbastanza simile) si arriva a scrivere questo codice molto banale nell'interpretazione:


Il codice è molto corto come si vede... Nella terza e quarta riga importiamo le librerie necessarie, nella settima riga definiamo il target, nella nona inizializziamo somma a zero per non avere problemi, nella undicesima impostiamo il loop, nella diciassettesima rimandiamo i dati al target  ed aspettiamo una risposta... Infine chiudiamo il collegamento... Due piccole precisazioni... Sono arrivato a scegliere range(4) dopo 4 tentativi, altrimenti avrei introdotto un loop condizionale sulla risposta... In più i dati devono essere trattati con unpack, dove I sta per unsigned int con dimensione 4, mentre < indica little-endian ... Penso che più non si possa dire... Adesso passo al livello 1, dove come lettura consigliata c'è la famosa Smashing the Stack for Fun and Profit.

Spero che questi wargames mi aiutino nel completare l'abraxas...

giovedì 3 novembre 2011

Abraxas 2011 - writeup level3

Il livello 3 mi ha permesso di esaminare un nuovo tool che è presente in qualsiasi distro linux ma che io non conoscevo... Il tool è strace, e rimando a wikipedia per una prima infarinatura... In pratica monitora le chiamate e le operazioni dello script lanciato... Questo tool mi è stato suggerito sempre da Steven...

Questo tool mi ha permesso di scoprire come lo script che avevo a disposizione operasse segretamente, cioè fornendomi le informazioni necessarie per capire che lo script cercava dentro una cartella delle chiamate ad altri script... Forse potevo intuirlo dal codice, ma solo il codice non mi dava molte informazioni... Come sempre si deve leggere il blog dell'agente 7a69, per avere qualche informazione in più:
She created software to process data from the life support systems and generate statistics. The life support system code depends on some kernel module that hasn't been developed yet so she's currently testing with generated datasets. The entire thing is written in bash and runs as a cronjob every 10 minutes.
 Le informazioni necessarie sono contenute nell'ultima riga... Cioè che gli script sono scritti in bash(si poteva capire anche dalla visione del sorgente degli script) e che ogni 10 minuti vengono eseguiti da cron... Quindi ho fatto 2 cose... Controllare cron per capire qualcosa in più:

cat /etc/cron.d/lifesupport_process

Da qui si nota che il processo viene avviato dall'utente level3, che è quello di cui cerchiamo la password... Ritornando allo script, notiamo che non trovando dentro /opt/lifesupportdata/ lo script common.inc.sh lo va a cercare nella seconda cartella definita da PATH, ma che comunque esegue sempre il controllo per vedere se è presente nella cartella suddetta...

Ho quindi creato dentro ad /opt/lifesupportdata/ un semplicissimo script in bash:

cd /opt/lifesupportdata/
nano common.inc.sh

#!/bin/bash
echo "Ciao" >> /tmp/file
cat /etc/pass/level3 >> /tmp/file

Il "Ciao" non serve a dir la verità, ma vabbè, l'ho messo così... Adesso lo script troverà nella prima PATH il secondo script che vuole includere, e così possiamo fargli aprire il file contenente la password grazie all'aiuto di cron... In un primo momento non funzionava, poi ho riavviato e lo script mi ha dato la password cercata...

Adesso abbiamo la password dell'utente level3, possiamo usare questo utente per proseguire nel wargame... Tutto il wargame si basa sull'analisi dello script, e dell'uso di strace... Infatti proprio questo mi ha fatto notare come lo script funzionasse...