Game of Thrones – Capture the Flag. (parte 3)

parte 1 | parte 2

Ed eccoci qui alla fase finale. Nelle parti precedenti abbiamo scoperto le regole da seguire (parte 1) e abbiamo collezionato le prime due bandiere (parte 2), Dorne e Grande Inverno. Ora quindi ci aspetta la “cavalcata trionfale” alla conquista delle cinque bandiere restanti (più le due segrete).
Per comodità, ecco di nuovo la mappa che Baelish ci ha fornito nella parte 2:

Le Isole di Ferro, la terza bandiera.

Quindi… ora devo procedere verso le Isole di Ferro e posso accedervi tramite dns. Questo mi porta a usare nslookup, che permette di effettuare delle query al server DNS: in questo caso, con il parametro TXT si ottengono tutti i record testuali.

Ed ecco che le Isole di Ferro sono state conquistate, in più abbiamo ottenuto il nick e la password per accedere a Capo Tempesta. Yuppi!

Capo Tempesta, la quarta bandiera

Dalla mappa sappiamo che a Capo Tempesta si accede tramite Webmin. Dopo aver inserito i dati di login (aryastark come nickname, N3ddl3_1s_a_g00d_sword#! come password), possiamo arrivare al File Manager del sistema. Da qui basta entrare nella directory aryastark per pescare la bandiera, insieme ad un piccolo ricordo del padrone di casa (almeno fino a qualche stagione fa), Stannis Baratheon.

La Valle di Arryn, la quinta bandiera.

Con la bandiera di Capo Tempesta abbiamo ottenuto le credenziali della Valle: la coppia robynarryn e cr0wn_f0r_a_king-_. Dalla mappa sappiamo che questa sfida è basata su Postgresql e che bisogna utilizzare la riga di comando. Dopo aver inserito i dati, si possono elencare i vari database: dalla schermata della bandiera precedente sappiamo che quello che stiamo cercando è in mountainandthevale.
Da qui, ho aperto il file flag: contiene una lunga stringa di caratteri, sicuramente codificati in qualche modo. Dopo qualche tentativo, è apparso chiaro che fossero semplicemente in base64.

L’Altopiano, la sesta bandiera.

Ok, le password sono fantastiche. Quindi, dopo aver ottenuto la quinta bandiera, ho recuperato anche la combinazione di username e password che mi servono per entrare nell’Altopiano. Dalla mappa so che qui si tratta di usare imap, ma so anche che la porta corrispondente, la 143, è filtered (parte 1).
Come fare per aprirla?
Per avere degli indizi ho effettuato una SELECT * from con il nome di ogni tabella presente nel database, finché non ho ottenuto questa frase:

I cittadini di Alto Giardino non sono mai stati grandi guerrieri, ma sono persone EDUCATE. Se vuoi entrare nella Fortezza, devi bussare alle porte ma secondo le regole… A loro piace l’ordine.”

Qualcosa di molto simile era stato detto nella directory the-tree (parte 2):

3487 64535 12345 . Ricordati questi numeri, perché avrai bisogno di usarli con persone EDUCATE – saprai quando è il momento di farlo

E direi proprio che è arrivato il momento di utilizzarle, quindi… bussiamo (usando knock, ovviamente) per tre volte.

Adesso la porta imap è aperta e posso collegarmi utilizzando le credenziali. Sono presenti delle cartelle: Trash, Drafts, Sent, Inbox. Dopo averle aperte tutte senza successo, ho trovato questa nella cartella Inbox:

Ed anche la sesta bandiera è stata conquistata. Ne manca soltanto una, l’ultima: Castel Granito e Approdo del Re.

Castel Granito e Approdo del Re, la settima bandiera.

Questa bandiera deve essere catturata usando gitlist/mysql. Provando a inserire nel browser l’IP 192.168.56.3:1337 è apparso un modulo per il login, in cui ho inserito le credenziali che costituivano la “ricompensa” di Altogiardino.
Sono apparse tre possibilità di scelta: casterly-rock, Dothraki, madking. A questo punto si procede nell’ordine in cui sono elencate:

Mai immagine fu più appropriata. Convertendo la stringa alfanumerica da esadecimali in stringhe, si ottiene l’indirizzo home/tyrionlannister/checkpoint.txt. Peccato che inserendolo manualmente il risultato sia una pagina di errore!
Però, la versione di gitlist installata sulla macchina soffre di una vulnerabilità piuttosto grave riguardante la remote command execution: si può fare code injection.

Sei molto vicina alla bandiera. Non è qui, è ad Approdo del Re. Dobbiamo partire da qui! Le credenziali per accedere sono: user/password user/pass: cerseilannister/_g0dsHaveNoMercy_ db: kingslanding

Quindi, sfruttando la vulnerabilità ed inserendo le credenziali in questo modo:

http://192.168.56.3:1337/casterly-rock/blob/master/%22%22%60mysql%20kingslanding%20-h%20192.168.56.3%20-ucerseilannister%20-p_g0dsHaveNoMercy_%20-e%20’show%20tables;’%60

sono riuscita a recuperare la lista delle directories. Accedendo a quella denominata iron_throne, si ottiene questa indicazione:

id text 1 -..-. . – -.-. -..-. — -.– … –.- .-.. -..-. ..-. .-.. .- –. 2
Hai ancora qualche privilegio in questo regno. Usali con cautela.” – Davos Seaworth’

Questa era facile da intuire: è in codice Morse e si può tradurre come /etc/mysql/flag. Peccato che, come l’indizio di Davos aveva previsto, non ho i permessi necessari per accedere al file.
Ma quali sono con esattezza i miei privilegi? Inserire il comando show grants for current_user mi ha fatto scoprire che posso GRANT, SELECT, INSERT, CREATE. A questo punto ho creato (CREATE) un’apposita tabella SQL e l’ho caricata nella risorsa della bandiera, in modo da poter ottenere l’ultima bandiera con una semplice SELECT:

Le ultime bandiere speciali

Adesso ho le sette bandiere dei regni e una delle bandiere “extra”: mi mancano quelle di Braavos e del Vetro di Drago. Oltre, ovviamente, alla battaglia finale.
Braavos l’ho già incontrata: ricordate la bandiera della Valle? Una delle tabelle restituite da Postgresql era proprio chiamata così. Con una select * from braavos_book su Postgresql appare…

La nona voce dell’elenco o è un gatto che passeggia sulla tastiera o è codificata in qualche modo – sigh, sto finendo le idee su come decodificare!
Vi risparmio le mille ipotesi: alla fine è un semplice Cifrario di Cesare:

Il Dio dai mille volti vuole che tu cambi faccia. Vuole che tu ti identifichi con uno dei personaggi sulla tua kill list. Decidi chi in base alla pagina perduta del libro. Il database a cui connettersi è braavos e la tua password ValarMorghulis.

Un rapido sguardo al braavos_book fa capire che manca la pagina 5 (non ci credete? Controllate!). A questo punto un’altra select su Postgresql: select * from aryas_kill_list.

Il quinto nome sulla lista è quello di Melisandre, quindi andiamo ad inserirlo per accedere al database:

Daje.

Per accedere alla bandiera del Vetro di Drago, mi sono connessa al servizio ssh con le credenziali DaenerysTargaryen e sono riuscita a recuperare due files: checkpoint.txt e digger.txt. Il primo riporta questo:

Vetro di Drago. Fuoco ghiacciato, nell’antica lingua di Valyria. Non è una sorpresa quindi che sia l’anatema per gli Estranei.” – Melisandre
Molto vetro di drago può essere trovato nella minera (172.25.0.2). Si può accedere alla miniera solo da qui. Siamo molto vicini… Non c’è l’incantesimo del fail2ban, quindi magari possiamo raggiungere la “radice” (root) del sistema scavando (digger)”. – Samwell Tarly
“Agli Estranei non importa se apparteniamo ai Corvi o al Popolo Libero. Siamo tutti uguali ai loro occhi, carne per il loro esercito. Ma insieme possiamo batterli.” – Jon Snow

Il secondo è una lista di parole che, dato l’indizio di Samwell, dobbiamo usare per “raggiungere la radice” attraverso 172.25.0.2. Usiamo quindi il dizionario in un attacco bruteforce all’account: per prima cosa ho creato un tunnel nell’ssh sulla porta 2222 in modo da poter usare hydra sull’indirizzo IP, poi ho lanciato il comando: hydra -l root -P digger.txt ssh://localhost:2222.
hydra non delude mai, e la password che è apparsa è Dr4g0nGl4ss!, con cui possiamo accedere finalmente ad ssh:

The Final Battle.

(In sottofondo: la canzoncina delle battaglie di Pokémon)
A questo punto non ci resta che trovare l’ultima bandiera per portare a termine questa (lunga) sfida. Usando le credenziali sono riuscita ad accedere all’host ssh:

Adesso sei pronto per affrontare la battaglia finale! Prova a scalare i privilegi fino alla radice.”
Che i Sette ti benedicano, e buona fortuna” – Game of Thrones CTF master 😉

Quindi ora devo scalare i privilegi per ottenere finalmente l’accesso al root. Beh, questa si preannuncia di certo la fase più impegnativa ed è quella su cui ho impiegato più tempo.
Dopo qualche ricerca, ho trovato la possibilità di sfruttare un modulo di Metasploit per agire sul Docker. Ho quindi inserito come parametro RHOST l’indirizzo del target, mentre LHOST l’indirizzo della macchina virtuale su cui stavo facendo girare Kali Linux, in modo da creare una nuova sessione con privilegi di root dall’account branstark.
A questo punto sono usciti fuori un file checkpoint.txt e un archivio final_battle. Ovviamente come prima cosa ho cercato di aprire l’archivio, ma è protetto con una password, altrettanto ovviamente.
Il file checkpoint.txt conteneva queste indicazioni:

Per sconfiggere gli Estranei avrai bisogno dell’aiuto dei Bruti, delle abilità imparate a Braavos dal Dio dai Mille Volte e delle armi in Vetro di Drago.
Alcuni indizi:
type of file = ???
pass = ???
useful-pseudo-code-on-invented-language = concat(substr(secret_flag1, strlen(secret_flag1) – 10, strlen(secret_flag1)), substr(secret_flag2, strlen(secret_flag2) – 10, strlen(secret_flag2)), substr(secret_flag3, strlen(secret_flag3) – 10, strlen(secret_flag3)))

Scritto così sembra incredibilmente difficile, ma mettendo insieme i pezzi è piuttosto elementare: la bandiera dei Bruti era 8bf8854bebe108183caeb845c7676ae4, la bandiera di Braavos 3f82c41a70a8b0cfec9052252d9fd721 e quella del Vetro di Drago a8db1d82db78ed452ba0882fb9554fc9. Ho tradotto lo pseudocode in linguaggio Java in maniera banale ed ho ottenuto la stringa alfanumerica 45c7676ae4252d9fd7212fb9554fc9, che è la password per l’archivio final_battle.

E così finisce la sfida di Game of Thrones – Capture the Flag. Ho ottenuto l’undicesima bandiera, le ho messe tutte nell’ordine indicato e le ho convertite con md5:

Congratulations you pwned the seven kingdoms game of thrones ctf awesome

Spero vi siate divertiti, o che sia stato utile a qualche “collega” che si è impantanato su questa macchina virtuale. 🙂


Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...