Discussione Hacking Challenges #1: risoluzione sfide (1/3)

0xbro

Super Moderatore
24 Febbraio 2017
4,464
179
3,755
1,825
Ultima modifica:


Hacking Challenges #1: risoluzione sfide (1/3)​

Nel seguente topic verranno spiegate le metodologie, i procedimenti e i tools necessari per risolvere il primo gruppo di sfide della prima edizione delle Hacking Challenges (le sfide le potete trovare al link qua sotto).




[Crypto] Riscaldamento (Easy)​

E' la tua prima CTF? Benvenuto!
Non è la tua prima CTF? Benvenuto ugualmente!

Questo non è niente di complicato, ci stiamo solo riscaldando ;)
Hint: ripulito ciò che c'è in eccesso dovrebbe risultare facile quanto leggere una tabella di caratteri

La sfida si presenta con la seguente stringa di caratteri:

53_55_5a_37_52_32_56_30_64_47_6c_75_5a_31_39_33_59_58_4a_74_5a_57_52_66_64_58_42_66_61_48_56_6f_50_33_30_3d

Quando si ha a che fare con delle sfide di cripto è sempre bene cercar di analizzare cosa si ha davanti, in modo da cercar di identificare quale possibile algoritmo sia stato implementato o che tipologia di encoding si abbia davanti.
Siccome a primo impatto si nota chiaramente come siano presenti solo numeri dallo 0 al 9 e solo lettere dalla a alla f, è immaginabile ci si stia trovando davanti a una stringa esadecimale. Come ci fa intuire anche l'hint, dunque, rimuoviamo i caratteri in eccesso ("_") e trasformiamo la stringa HEX in una stringa di caratteri ASCII (da qui l'altro riferimento all'hint "dovrebbe risultare facile quanto leggere una tabella di caratteri"). Per farlo possiamo utilizzare diversi strumenti, per comdità usero il comando tr -d <delimiter> che permette di specificare quale delimitatore rimuovere, e il comando xxd -r -p che permette di convertire un formato HEX in ASCII (il funzionamento di xxd non è propriamente questo, ma per la nostra esigenza calza a pennello).

Bash:
$ cat Riscaldamento.txt | tr -d '_' | xxd -r -p ;echo ""
SUZ7R2V0dGluZ193YXJtZWRfdXBfaHVoP30=

Otteniamo così una nuova stringa che a colpo d'occhio si capisce essere encodata in base64 poichè termina con il carattere "=". Ogni qualvota ci troviamo davanti una stringa che termina con uno o due uguali, al 99% delle volte si tratta di una stringa in base64. Possiamo quindi utilizzare il comando base64 -d per decodificarla e ottenere la prima flag.

Bash:
$ cat Riscaldamento.txt | tr -d '_' | xxd -r -p | base64 -d;echo ''
IF{Getting_warmed_up_huh?}



[Crypto] Mc Donald (Easy)​

"Salve, vorrei un menù Gran Crispy con patatine fritte grandi, coca-cola grande, ketchup e maionese, grazie.

Cosa? Questa è l'università di psicologia?"​

Hint: Ingredienti Crispy Mc Bacon:
  • Panino morbido per hamburger 1.
  • Cheddar 2 fette.
  • Bacon 3 fette.
  • Carne di manzo 180 g.
  • Concentrato di pomodoro 1 cucchiaino.
  • Maionese 30 g.
  • Estratto di carne q.b.
  • Capperi 3 g.
La sfida si presenta con la seguente stringa:

KFKKKKKFKFKKKFKFKKKKKFKKKFKKKFKFFFKFKFFKKFKFFKKKKKKKKFKKKKKFKKKKKKKKFKKFFKFKFFKK

Analizzando la stringa, si può notare come sia composta solamente da due caratteri (F e K) e come la sua lunghezza sia un numero multiplo di 5. L'hint in parte svela già quale algoritmo sia stato implementato per cifrare la flag, ma nel caso in cui non si fossero sbloccati gli aiuti, dopo un po' di ricerce, utilizzando le parole chiave "2 symbol cryptography" ci si sarebbe imbattuti nel sito "Practical Cryptography", (link) nel quale viene detto:
...
How many different characters are there? If there are only 2 different symbols, it is likely the cipher is Baconian.​

Scoperto così il tipo di encoding utilizzato, è possibile utilizzare uno dei tanti tools online in modo da decodificare la stringa e ottenere la flag finale (tra i tools online più utilizzati consiglio vivemanete di salvarsi dCode.fr):
bacon1.png



[OSINT] Riesci a trovarmi? (Medium)​

Il mare del web è un luogo immenso, dove anche la più misera recensione o il più misero commento una volta postato non potrà mai più essere trovato.
O forse mi sbaglio?​
Hint: Hai già visitato la sezione https://www.inforge.net/forum/resources/categories/pentesting-exploit-e-scanner.225/ ? Secondo me puoi trovare qualcosa di utile

La sfida inizia fornendoci solo una email: [email protected]

Documentandosi sul forum (ref) e su altri articoli online è possibile individuare una specifica tecnica di OSINT basata sugli id di Google che permette di trovare tutte le informazioni pubbliche abbinate ad un account Google partendo proprio da una email.

Il procedimento di risoluzione della sfida è ampiamente descritto all'interno del riferimento sopra, per cui sarà necessario seguire i procedimenti illustrati in quella guida per trovare la flag. In alternativa all'approccio manuale è anche possibile utilizzare un tool chiamato GHunt in modo da automatizzare il processo e risolvere la sfida.
OSINT1.png
https://www.google.com/maps/contrib/{userID}

OSINT2.png




[Mobile] Inforge Staff Photobook (Medium)​

0xbro, CrashTest, Dazorn, DispatchCode, KingNavas, CryptoVegas, Kode, Mich43, Not an engineer, SpeedJack, Valley, AlessioDP, Stefano Novelli, ZioMicio, Darkhim, Max Fridman... Sarebbe bello immortalare questo momento per sempre.​
Hint: Una volta riconosciuta l'estensione non ti resta che aguzzare la vista!

La sfida comincia con un archivio .rar protetto da una password di cui non siamo a conoscenza:​
1.png

L'unica via in questo caso, oltre al provar a tirare a indovinare la password, è fare un attacco brute force all'archivio.
Gli archivi rar è possibili craccarli tramite john-the-ripper, un tool molto famoso per questo genere di cose, che però per riuscire nell'inteno ha bisogno di riceve in pasto l'hash dell'archivio. La suite mette a disposizione un tool fatto apposta, chiamato rar2john, che permette di ricavare l'hash di un archivio rar protetto da password partendo dall'archivio stesso.

Bash:
$ locate rar2john
/usr/sbin/rar2john
$ /usr/sbin/rar2john InforgeStaffPhotobook.rar > rarArchive.hash
$ cat rarArchive.hash
InforgeStaffPhotobook.rar:$rar5$16$f92f68197913b2383456a58fc310a644$15$694a3e714b52d05feb76eae88f99f767$8$a7cd29e4951ac647

Una volta ricavato l'hash, possiamo cercare di craccarlo tramite john-the-ripper e l'utilizzo di una wordlist (rockyou.txt per quanto riguarda le ctf o le password deboli è sembra un'ottima scelta). Useremo l'opzione --fork=5 in modo da creare 5 differenti thread e risparmiare tempo.

Bash:
$ john rarArchive.hash --wordlist=/usr/share/wordlists/rockyou.txt --fork=5
2.png

Ottenuta la password possiamo quindi estrarre il file InforgeStaffPhotobook.ab contenuto al suo interno ed iniziare a documentarci su quale tipo di file sia (Una volta riconosciuta l'estensione...). Dopo un po' di ricerche scopriamo che l'estensione .ab è abbinata ai file di backup fatti con adb (il debugger di android) e che è possibile scompattare questa tipologia di file (rif) per vedere cosa contengano. Tra i vari modi è possibile utilizzare un tool della suite android-backup-tookit, chiamato android-backup-extractor, che permette di trasformare il file .ab in un file .tar e renderlo così scompattabile:

Bash:
$ java -jar /opt/Android/android-backup-tookit/android-backup-extractor/android-backup-extractor-20180521-bin/abe.jar unpack InforgeStaffPhotobook.ab abContents/Photobook.tar
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
$ tar -xvf abContents/Photobook.tar
apps/android.ext.services/_manifest
apps/com.amaze.filemanager/_manifest
apps/com.android.bips/_manifest
apps/com.android.bluetoothmidiservice/_manifest
apps/com.android.bookmarkprovider/_manifest
...

Verranno generate due directory: /apps, contenente il backup delle applicazioni installate sul device al momento del backup, e /shared, contenente le immagini, la musica, i video, i download ecc.​
3.png
Osservando il contenuto delle directory vediamo la presenza di 16 foto all'interno nella cartella PhotoBook. Seguendo anche l'indizio dato dalla sfida (...non ti resta che aguzzare la vista!) apriamo le foto e osserviamole con attenzione.

4.png


Per ogni foto si può notare la presenza di un codice esadecimale inserito all'interno di ogni immagine. Estraiamolo manualmente, ricomponiamo la stringa finale e convertiamola in ASCII per ottenere la flag finale.

Bash:
$ echo 49 46 7b 46 6f 74 6f 21 43 68 65 65 65 73 65 7d | xxd -r -p ;echo ''
IF{Foto!Cheeese}