Categories: , ⚔️, CTF, Hacking, 🗡️11 min read

CTF Game of Thrones – Parte II

Incipit

L’articolo tratta la seconda parte della CTF (Capture The Flag) basata sull’universo di Game of Thrones, che ho avuto il piacere di svolgere come lezione per l’Università degli Studi di Perugia, in collaborazione con i Professori Stefano Bistarelli e Francesco Santini.

La prima parte è stata pubblicata qui [Link] .

Nella scorsa puntata ci eravamo fermati a riposare in una locanda di Dorne, tentando di dirimere l’enigma dei due file trovati all’interno dell’FTP.

  • get problems_in_the_north.txt get the_wall.txt.nc
    
    

    ,

    get problems_in_the_north.txt
    
    get the_wall.txt.nc

    ;” data-fusion-font=”true” data-fusion-google-font=”Fira Code” data-fusion-google-variant=”5

    
    

    ,

    get problems_in_the_north.txt
    
    get the_wall.txt.nc
    
    

    ,

    get problems_in_the_north.txt
    
    get the_wall.txt.nc

    “>problems_in_the_north.txt

  • get problems_in_the_north.txt get the_wall.txt.nc
    
    

    ,

    get problems_in_the_north.txt
    
    get the_wall.txt.nc

    ;” data-fusion-font=”true” data-fusion-google-font=”Fira Code” data-fusion-google-variant=”5

    
    

    ,

    get problems_in_the_north.txt
    
    get the_wall.txt.nc
    
    

    ,

    get problems_in_the_north.txt
    
    get the_wall.txt.nc

    “>the_wall.txt.nc

Ora, non rimaneva che scaricare in locale i due file per osservarli più da vicino, utilizzando il comando get:


,

get problems_in_the_north.txt

get the_wall.txt.nc

>

Dopo questo ultimo esame, abbandonai definitivamente Dorne, digitando il comando exit.

Tramite il comando cat diedi subito un’occhiata al file .txt.

cat problems_in_the_north.txt

“Ci sono problemi al nord. Dobbiamo viaggiare velocemente. Una volta giunti lì difenderemo la barriera”
– Jon Snow

“Che tipo di magia è questa?!? Non ho mai visto formule simili. Controlliamolo attentamente”
– Maester Aemon Targaryen

md5(md5($s).$p)

nobody:6000e084bf18c302eae4559d48cb520c$2hY68a

Esaminai quindi anche il file the_wall.txt.nc ,sempre tramite lo stesso comando.

Già dalle prime righe dell’output si può notare il nome del famoso algoritmo di cifratura a blocchi a chiave simmetrica, conosciuto come Advanced Encryption Standard (AES) a.k.a. Rijndael. Vale a dire che il file era criptato. E senza la giusta key, non saremmo riusciti a decriptarlo.

Come primo passo, decisi quindi di analizzare l’hash fornitoci dal file problems_in_the_north.txt: 6000e084bf18c302eae4559d48cb520c$2hY68a

L’algoritmo di hashing con il quale era stato ottenuto era: md5(md5($s).$p)

Dove $s sta per salt e $p sta per password.

Un salt è una sequenza casuale di bit che viene utilizzata assieme ad una password in input. Solitamente, viene utilizzato per incrementare il livello di sicurezza con il quale le password vengono salvate.

Gli algoritmi di hash mappano una stringa di lunghezza arbitraria in una stringa di lunghezza predefinita. A differenza della codifica e della cifratura, sono processi irreversibili.

Ad esempio, la codifica MD5 della frase: “mi ritrovai per una selva oscura, ché la diritta via era smarrita” è: “cecd668227b837e56f326beffea802a3”.

Qualsiasi modifica alla frase (sia essa anche di un solo spazio o di una virgola) produrrebbe un hash completamente differente.

In teoria, se volessimo risalire da un hash alla password, potremmo ipotizzare di prendere un elenco di parole (wordlist) potenzialmente utilizzabili come password, tradurlo nel corrispondente hash e qualora l’hash della password fosse uguale a uno degli hash della wordlist, allora avremmo trovato la password.

Per lo svolgimento della CTF ho utilizzato hashcat, un tool scaricabile al seguente indirizzo: https://hashcat.net/hashcat/

La logica del comando che avremmo dovuto utilizzare:

[comando] [modalità di attacco] [algoritmo di hash] [l’hash da craccare] [la wordlist di parole]

Il problema, a questo punto, riguardava la necessità di utilizzare lo stesso algoritmo di hashing con il quale la stringa era stata prodotta.

Invocando l’ “help” di hashcat l’algoritmo che ci serviva md5(md5($salt).$password) non appariva nella lista. Era presente invece, con il tag 20, l’algoritmo md5($salt.$pass) che avrei potuto utilizzare dopo aver sostituito il salt con md5($salt) nell’hash.

Tornando quindi al nostro hash 6000e084bf18c302eae4559d48cb520c$2hY68a , la parte che avrei dovuto convertire in formato md5 si trova dopo il simbolo $: 2hY68a

Digitai allora il comando:

echo -n 2hY68a | md5sum

  • echo : mostra a schermo (sulla standard output) il parametro passato
  • -n : esclude nell’output una nuova riga finale
  • 2hY68a : la parte che vogliamo convertire in md5
  • | : il “pipe” ci consente di passare l’output del primo comando al comando successivo
  • md5sum : converte in md5

A questo punto, non rimaneva che riscrivere interamente l’hash nel nuovo formato md5($salt.$pass) e salvarlo in un file di testo.

6000e084bf18c302eae4559d48cb520c:0cbb5be2c4504bed573802efbd909965

[NOTA: il “:” viene utilizzato per separare gli hash. In questo modo, ho potuto utilizzare Hashcat tramite il seguente comando (nell’esempio ho utilizzato Hashcat sotto OS Windows)]

hashcat-cli64.exe -m 20 -a 0 c:toolsHlegacyHASH_NORTH.txt c:toolswlistrockyou.txt

  • hashcat-cli64.exe : è il comando per lanciare hashcat
  • -m 20 : identifica il tipo di hash da craccare. In accordo con le opzioni di hashcat il formato md5($salt.$pass) è identificato come “20”
  • -a 0 : indica la modalità con cui voglio procedere nell’attacco dell’hash, nel mio caso tramite una wordlist
  • c:toolsHlegacyHASH_NORTH.txt : il file .txt che contiene il mio hash
  • c:toolswlistrockyou.txt : la lista di parole con cui voglio effettuare il cracking (le mie possibili password)

Ecco finalmente la nostra key per decriptare il file cifrato: stark.

[NOTA: Sarebbe stato possibile anche utilizzare una vecchia versione di Hashcat nota come “Legacy” (la 2.0), scaricabile al seguente indirizzo: https://github.com/attackdebris/hashcat-2.0 . Questa versione ha direttamente l’ “Hash Type” md5(md5($salt).$password) necessario per craccare il nostro hash e viene identificata come: 3610.]

Non rimaneva altro che aprire il file the_wall.txt.nc utilizzando la key appena trovata. Per identificare il tool di decrypt da utilizzare, ci venne incontro il messaggio recatoci dal corvo (Parte I – Immagine 19): “Per passare attraverso il muro, l’incantesimo mcrypt, ti sarà utile[..]”.

[NOTA: se mcrypt non è installato sulla nostra distro, ci basterà utilizzare “apt-get”: sudo apt-get install mcrypt]

Provai quindi ad aprire il file con il tool, digitando:

mcrypt -d the_wall.txt.nc

  • mcrypt : tool per decriptare
  • -d : opzione di decrypt
  • txt.nc : file da decriptare

Quando mi fu richiesta la password digitai quella della key: stark .

Il tool decriptò il file creandone un altro con la sola estensione .txt : the_wall.txt

E nel momento in cui eseguii il cat sul nuovo file, comparve la nostra successiva destinazione.

“Abbiamo difeso la barriera! Ti ringrazio del tuo aiuto! Adesso puoi dirigerti verso Grande Inverno”
– Jeor Mormont, Comandate dei Guardiani della Notte.

“Scriverò sulla mappa il seguente percorso, per giungere più velocemente a Grande Inverno. Un giorno sarò un grande maestro”
– Samwell Tarly

http://winterfell.7kingdoms.ctf/——W1nt3rf3ll——

Enter using this user/pass combination:

User: jonsnow
Pass: Ha1lt0th3k1ng1nth3n0rth!!!

Navigando all’indirizzo http appena ottenuto, non saremmo riusciti a raggiungere la pagina. E anche sostituendo al dominio l’indirizzo IP, il risultato che si otteneva era il medesimo o quasi:

http://192.168.178.80/——W1nt3rf3ll——/

Ma ispezionando la pagina riuscii a trovare un interessante indizio, visualizzabile analizzando il contenuto tramite il tasto F12:

“Non arriverai mai a Grande Inverno in quella direzione. Sembra che tu non abbia mai imparato a leggere”
– Il Mastino

“Cosa stai dicendo? VirtualHost? Che diavolo è quello? Ti sei ubriacato di nuovo?”
– Gregor (La Montagna) Clegane

Il VurtualHosting è una metodologia impiegata sui Web Server, dove più domini possono essere allocati sulla stessa macchina condividendo lo stesso IP.

Nel nostro caso significava che l’IP della macchina CTF: 192.168.178.80 ospitava il dominio http://winterfell.7kingdoms.ctf/——W1nt3rf3ll——

Esiste un file, sui sistemi operativi, originariamente chiamato HOSTS.TXT, che consente di tradurre nomi host in indirizzi IP. Il file contiene righe di testo costituite dall’associazione “IP – nome host” e in maniera similare, assolve la stessa funzione del Domain Name System (DNS).

Dovevamo quindi indicargli la rotta! La prima cosa che feci fu individuare la cartella di default del mio file hosts. Il percorso al file, nel mio caso, era: /etc/hosts (avrei potuto anche utilizzare il comando locate per individuarlo).

[NOTA: Il percorso del file su sistemi operativi differenti: Windows – C:WindowsSystem32driversetchosts – MAC OSX – /private/etc/hosts]

Utilizzando l’editor di testo vim effettuai l’accesso al file:

vim /etc/hosts

vim /etc/hosts

Portandomi al termine del file, entrai in modalità di inserimento schiacciando il tasto “i” ed inserii la nuova riga costituita dall’IP della macchina GOT e il dominio del VirtualHost:

192.168.178.75 winterfell.7kingdoms.ctf

192.168.178.75 winterfell.7kingdoms.ctf

Uscii dalla modalità inserimento premendo il tasto Esc e salvai il file con :wq

Avevamo trovato la rotta per raggiungere la nostra destinazione. Riaprii il browser ed incollai, ancora una volta, l’indirizzo del VirtualHost: http://winterfell.7kingdoms.ctf/——W1nt3rf3ll——

Questa volta apparve la schermata di login. E noi avevamo già username e password, reperiti all’interno del file decriptato the_wall.txt:

User: jonsnow Pass: Ha1lt0th3k1ng1nth3n0rth!!!

Finalmente, ispezionando la nuova pagina (tramite il tasto F12), scoprimmo di aver catturato la bandiera del nostro secondo regno: Kingdom of The North (http)! (Mappa Parte I – Figura 13).

Benvenuto a Grande Inverno

Hai conquistato il Regno del Nord. Questa è la tua seconda flag del regno!

639bae9ac6b3e1a84cebb7b403297b79

“Dobbiamo fare qualcosa qui prima di partire per le Isole di Ferro, mia signora “
– Podrick Payne

“Sì, posso sentire la magia su quello scudo. Le spade non servono più qui”
– Brienne Tarth

Adesso, la nostra prossima destinazione sarebbe stata il terzo regno “Iron Islands” – DNS! (Mappa Parte I – Figura 13)

Il Domain Name Server (DNS) viene utilizzato per tradurre un nome di un dominio in un indirizzo IP. È un po’ come se invece di fornirci lunghe coordinate di longitudine e latitudine, per comodità, ci venisse fornito l’indirizzo del posto (nome della strada, numero civico, CAP, etc..).

Prima di proseguire però, l’indizio appena trovato ci esortava a cercare nella pagina “la magia su quello scudo […]”.

Il simbolo degli Stark faceva bella mostra di sé al centro della pagina e lo stesso emblema veniva utilizzato anche sugli scudi della casata.

Decisi quindi di dargli un’occhiata più da vicino. Salvai l’immagine cliccando su di essa con il tasto destro del mouse “Save As” ed una volta nella nostra cartella (ctf_uni) utilizzai il comando strings.

Il suddetto comando legge i dati di uno o più file oppure i dati provenienti dallo standard input, ricercando in essi delle sequenze di byte che rappresentino stringhe di caratteri visibili e lista a schermo.

strings stark_shield.jpg

Fra le numerose stringhe che il comando estrasse, ve ne era una degna di nota.

“Timef0rconqu3rs TeXT andrebbe chiesto per entrare nella fortezza delle Isole di Ferro “
– Theon Greyjoy

Aveva tutta l’aria di essere un record TXT.

Un record TXT (o record di testo) è una tipologia di record DNS che permette di associare del testo ad un host sotto forma di informazioni leggibili (anche da fonti esterne al dominio). Solitamente, vengono utilizzati a scopi di conferma della proprietà del dominio, per garantire la sicurezza delle email o per registrare piccole quantità di dati leggibili dalla macchina nel DNS.

Quindi, se la supposizione era corretta, avremmo dovuto vedere il testo contenuto nel record DNS.

Per lo scopo utilizzai il comando nslookup. Tale comando, presente in tutti i sistemi operativi, utilizza il Transmission Control Protol / Internet Protocol (TCP/IP) e consente di effettuare interrogazioni ad un server DNS.

nslookup -type=TXT Timef0rconqu3rs.7Kingdoms.ctf 192.168.178.80

  • nslookup : comando per interrogare il DNS
  • -type= : specifichiamo la tipologia di record
  • TXT : record di tipologia “testo”
  • 7Kingdoms.ctf : il nome del record DNS da interrogare composto da Timef0rconqu3rs.[dominio].ctf
  • 168.178.80 : …appartenente all’IP della macchina

Timef0rconqu3rs.7kingdoms.ctf text = “Hai conquistato la flag del regno delle Isole di Ferro: 5e93de3efa544e85dcd6311732d28f95. Adesso dovresti recarti al regno delle Terre della Tempesta http://stormlands.7kingdoms.ctf:10000 . Entra usando queste credenziali: aryastark/N3ddl3_1s_a_g00d_sword#!”

A questo punto, non solo avevamo conquistato il terzo regno delle Isole di Ferro, ma avevamo anche una nuova meta e delle credenziali di accesso.

…E mentre ancora il fumo si levava alto dalla fortezza delle Isole di Ferro, eravamo già salpati verso le Terre della Tempesta dove un nuovo enigma ci attendeva…

To be continued…

Go to Top