Rubrica Wargame: Imparare a trovare vulnerabilità lato server con Natas [Livello 1-10]

Tempo di lettura: 8 minuti
Data pubblicazione: October 25, 2016

Gli Wargame sono sfide, sono laboratori per imparare e divertirsi, sono l’applicazione di tutta la teoria che studiamo giornalmente. Dopo aver imparato ad utilizzare il terminale con Bandit, passeremo oggi ad una sfida più difficile, ma anche più divertente. Sempre grazie a Overthewire ci troveremo ad affrontare un’applicazione web, scovare le password nascoste in esso e scalare i vari livelli, fino ad arrivare all’ultimo. Il gioco che introdurrò e spiegherò passo passo è Natas. Non serve SSH, serve solamente un browser e tanta voglia di imparare.

Livello 0->1

natas0
natas0

La pagina ci avvisa dicendoci che la password si trova in quella pagina. La prima cosa che mi viene in mente è che potremmo guardare nel codice sorgente

Basta infatti fare tasto Destro sul mouse->_Visualizza sorgente pagina _ed ecco che la nostra password è li pronta per essere copiata.

natas0-1
natas0-1

Livello 1->2

In questo livello veniamo avvisati che il tasto destro è stato disabilitato. Sebbene sembra che a me funzioni senza nessun problema se clicco all’esterno dell’area bianca, ci sono molti espedimenti per aggirare il blocco, ad esempio accede direttamente a view-source, o avere un plugin del browser che ci permette di vedere la sorgente della pagina.

Utilizzo un plugin come Firebug per vedere la sorgente, ed ecco che trovo immediatamente la password

natas1-2
natas1-2

Livello 2->3

La nuova pagina mi dice che non c’è nulla. Controllo il sorgente, ed effettivamente sembra non ci sia nulla. Però, c’è un link! C’è un link con un percorso. . .

natas2
natas2

Seguo il link che mi rimanda all’immagine di un pixel. Visto che il pixel è solo un pixel, provo a vedere se la cartella files è leggibile. Ed ecco che scopro un file users.txt in cui ci sono le credenziali del nuovo livello

natas2-1
natas2-1
# username:password
alice:BYNdCesZqW
bob:jw2ueICLvT
charlie:G5vCxkVV3m
natas3:sJIJNW6ucpu6HPZ1ZAchaDtwd7oGrD14
eve:zo4mJWyNj2
mallory:9urtcpzBmH

Livello 3->4

Stavolta anche guardando il codice sorgente non c’è proprio nulla, neanche un link. Però ci dice che neanche Google potrebbe trovarlo, magari intende un crawler. E quale file permette ad un crawler di visualizzare un pagina?

Come da suggerimento, guardo il file robots.txt. Nel file, vedo che la cartella _/s3cr3t/ _è vietato l’accesso ai Web-Crawler. Provo quindi ad aprirla, trovo il solito file degli utenti, ed ecco la mia password.

natas3-4
natas3-4

Livelo 4->5

Accesso disabilitato. Solo gli utenti che provengono dal livello natas5 possono visitare la pagina. Ma come possiamo se non abbiamo l’accesso? In pratica, molte pagine web registrano la pagina di riferimento, ossia la pagina precedente che abbiamo visitato. Un plugin come HackBar potrebbe essere molto utile. . .

Installato HackBar nel nostro browser (par attivarlo basta cliccare F9), inserisco come pagina Referer il livello successivo

natas4
natas4

Eseguo, ed ecco che ricevo la password del prossimo livello.

Access granted. The password for natas5 is iX6IOfmpN7AYOQGPwtn3fXpbaJVJcHfq

Livelo 5->6

Ora l’accesso è disabilitato perchè non siamo loggati. Solitamente sono i cookie a gestire le sessioni e le connessioni degli utenti. Sempre solitamente questi sono stringhe casuali, in modo che non possano essere replicati o modificati manualmente. In questo caso i cookie come sono impostati? Un plugin di gestione dei cookie come CookieManager potrebbe essere molto utile . . .

Apro CookieManager+ e cerco il cookie relativo al livello. Dopo averlo trovato, modifico il valore booleano da 0 a 1. In questo modo sarò connesso al livello e potrò visualizzare la password.

natas5-6
natas5-6

Livello 6->7

In questo livello iniziamo a vedere un form, anche se sembra di essere tornati ai livello iniziali, visto che funziona tutto da codice sorgente (e già vi ho detto molto). Visualizzando la sorgente si può vedere un semplice codice e la relavita cartella di destinazione. Che sia li la parola segreta?

natas6
natas6

Seguendo il percorso _includes/secret.inc _mi trovo di fronte ad una pagina completamente bianca. Ma questo non significa che non ci sia nulla all’interno del codice html, anzi. E infatti, in un codice php troviamo la chiave

<? $secret = "FOEIUWGHFEEUHOFUOIU"; ?>

Inserendola nel form, ci viene svelato il codice

natas6-7
natas6-7

Livello 7->8

Ora abbiamo un indizio, in cui ci dice che la password è nella cartella

/etc/natas_webpass/natas8

Sappiamo anche che la pagina viene risolta con una GET, come

http://natas7.natas.labs.overthewire.org/index.php?page=home

La risoluzione è sotto i nostri occhi. . .

Unendo i due indizi dati poche righe sopra, navigo all’indirizzo

http://natas7.natas.labs.overthewire.org/index.php?page=/etc/natas_webpass/natas8

Ed ecco che viene stampata la password

natas7-8
natas7-8

Livello8->9

Come il livello precedente abbiamo un funzione che possiamo visionare

$encodedSecret = "3d3d516343746d4d6d6c315669563362";

function encodeSecret($secret) {
    return bin2hex(strrev(base64_encode($secret)));
}

if(array_key_exists("submit", $_POST)) {
    if(encodeSecret($_POST['secret']) == $encodedSecret) {
    print "Access granted. The password for natas9 is ";
    } else {
    print "Wrong secret";
    }
}
?>

La parte evidenziate in grassetto è quella che ci interessa, Noi ora non abbiamo la chiave direttamente, ma abbiamo la chiave su cui sono state eseguite una serie di operazioni. Utilizzando php, come possiamo invertire le operazioni ed ottenere la chiave?

Il procedimento è molto semplice, basta eseguire all’inverso la operazioni che esegue il server ed ottieniamo la chiave. Da terminale eseguo la funzione inversa con il comando

php -r 'echo base64_decode(strrev(hex2bin("3d3d516343746d4d6d6c315669563362")));'

Come si può vedere ho converito l’esadecimale in binario (hex2bin()), poi invertito la stringa con strrev() ed infine decodificato in base64 con base64_decode().

natas8-9
natas8-9

Copio la stringa in output e la inserisco nel form.

La password per natas9 è quindi W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl.

Livello9->10

In questo livello abbiamo un form che esegue una ricerca all’interno di un file. Anche se cerchiamo in tutto il dizionario non troveremo la password. Questa è una vulnerabilità trovata anche in Kioptrix 1, nel quale tramite un form potevamo eseguire comandi diretti sul server. E visto che sappiamo che la password si trova in /etc/natas_webpass/natas10 il passo è semplice

Come da suggerimento, eseguo il comando cat nel form di ricerca, andando a visualizzare il file delle password

; cat /etc/natas_webpass/natas10
natas9-10
natas9-10

La password per il livello successivo è quindi nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu.

Visto che questo gioco ha più di trenta livelli, ho deciso di dividere in tre la rubrica. Spero non me ne vogliate, ma Natas è particolarmente interessante e farlo di fretta ha poco senso. Per chiunque volesse già approfondire, consiglio di leggere gli articoli di OWASP e Kioptrix, i quali potrebbero contenere informazioni molto utili per i prossimi livelli!