SOLUZIONE Hacking Contest Spring Break Seeweb

Siamo lieti di presentarvi la nostra soluzione della seconda edizione dell’hacking contest di Seeweb. Purtroppo a causa dell’apertura del nostro ufficio non abbiamo avuto modo di partecipare in modo costante, ma abbiamo deciso di rendervi partecipi dei nostri passaggi.

A differenza della precedente edizione questa volta era richiesta una registrazione per ricevere un indirizzo IP da cui iniziare le analisi.

Siamo quindi partiti con una scansione di tutte le porte TCP e dei servizi utilizzando Nmap.

PORT      STATE SERVICE    VERSION
80/tcp    open  tcpwrapped
65533/tcp open  unknown
65534/tcp open  ssh        OpenSSH 6.0p1 Debian 4+deb7u2 (protocol 2.0)</pre>

La porta 65533 ha da subito colpito la nostra attenzione, anche per l’assenza di credenziali in nostro possesso per collegarci via ssh.

Provando a collegarsi via Telnet veniva mostrato un menu che sembrava permettere lo svolgimento di diverse azioni.

telnet 212.25.162.134 65533

La quasi totalità delle opzioni non permettevano di fare nulla, abbiamo quindi pensato di provare a fare un po’ di fuzzing, il quale ci ha generato un (crediamo) finto Buffer Overflow, facendo crashare il programma e portandoci a una nuova schermata.

Questa nuova schermata ci proponeva nuovamente diverse opzioni, la maggior parte delle quali inutilizzabili, una delle quali raccoglieva i log dei tentativi d’accesso al server via SSH e nel caso fossero tentativi falliti registrava lo username. Uno di questi tentavi aveva registrato un’immissione erronea dell’utente kermit della password come username.

A questo punto non rimaneva che collegarsi con le credenziali ottenute via SSH.

ssh kermit@212.25.162.134 -p 65534   FTcc..sb1

Nella home dell’utente kermit si potevano trovare 3 file:

  • msg: contente un messaggio cifrato
  • map: contenente la mappa di cifratura del messaggio
  • next_target.zip: file zip protetto da password
88181890981263980

5149563718743156045654400456529565598850728282456505543456524956830488575651435689275689262374725662956559553281956965417814398895652200456865040935856880150525654478148825039885625651495652288152954988431569056812555548484915688954743156885125651466156045588943156620565595532814

51488572525683585683048857565143568872598056592564725640594585556160962568350356628727568972552638556549652565055561756592565990056881639650256315652955750893565815080

505545686502553456894555559175256892756488882522725640563501568971555598115618392339871

53895954574812259786


-----------------------
| |0|1|2|3|4|5|6|7|8|9|
| |l|o|e|t|a| |n|r| |i|
|5|u|h|d|j|f|s| |k|y|w|
|8|.|m|z|b|g|,|q|v|c|p| 
-----------------------

Per decifrare il messaggio era necessario utilizzare i numeri come coordinate della mappa, così da trovare le lettere corrispondenti. La particolarità della cifratura risiedeva nel fatto che i numeri erano da considerare a coppie solo ed esclusivamente se il primo dei due numeri fosse stato un 5 o un 8.

88 = c
1 =  o
81 = m
89 = p
0 =  l
9 =  i
81 = m
2 =  e
6 =  n
3 =  t
9 =  i

Il messaggio decriptato per intero ci proponeva la password del file zip e quest’ultimo conteneva il secondo target.

complimenti.

hai trovato la falla di sicurezza usata dai black hat per penetrare nei sistemi informatici della quality cloud e hai
decodificato il messaggio cifrato che hanno lasciato nel sistema

hacked by black hat crew. we are always online but never present, find us or we will continue to disrupt you.

usa questa password per accedere al tuo prossimo obiettivo

jpwfkameewrq

La tua missione continua qui:

hostname: 212.25.162.150
username: public
password: je3gi7to

Recupera la formula del vaccino contenuta nel file /home/monday/antigene_sbc

Dopo esserci collegati via SSH al secondo server come utente public abbiamo visto il file antigene_sbc nella cartella home di monday, ma non avevamo i permessi di lettura, serviva quindi una privilege escalation.

Cercando gli eseguibili SUID abbiamo notato gmanager in /usr/bin, il quale poteva essere eseguito da public, ma girava come root. Analizzando il binario con strace si poteva notare che se lanciato con il flag s provava ad aprire il file ./lastlog dopo aver controllato i permessi di lettura dell’utente che aveva avviato gmanager e effettuato una pausa di 2 secondi.

Riassumendo:

  1. Controllo permessi di lettura del file ./lastlog  da parte di public (se symlink controllava i permessi sul file destinatario del symlink)
  2. Pausa 2 secondi
  3. Apertura del file ./lastlog come root e scrittura a schermo del suo contenuto

Questa procedura risultava exploitabile sostituendo il file ./lastlog nei due secondi di pausa con un semplice script come questo.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/sh

X=1

while [ $X -le 2 ]
do
	mv lastlog lastlog1
	mv lastlog2 lastlog
	mv lastlog1 lastlog2
done

Dove lastlog era un symlink a /home/monday/antigene_sbc, lastlog1 un file di passaggio e lastlog2 un file leggibile da public. In questo modo i file venivano ruotati in modo costante, sostituendo di fatto il file leggibile con il symlink e permettendone la visualizzazione a schermo.

Complimenti!
Sei riuscito a recuperare in tempo la formula del vaccino di nuova generazione su cui stava lavorando la Quality Cloud Farmaceutic.
Di seguito sono riportate le sostanze usate, con le opportune caratteristiche: 

- Acido Acetilsalicilico, formula bruta C7H6O3, P molecolare 138 uma, d=140 g/cm3 
- Anidride Acetica , formula bruta C4H6O3, P molecolare 109 uma, d=1,08 g/cm3 
- Acido acetilsalicilico, formula bruta C9H8O4, P molecolare=180 uma, d=1,35 g/cm3 
- Acido acetico, formula bruta C2H4O2, P molecolare 60 uma,d 1,05 g/cm3


Il tuo prossimo obiettivo:

hostname: 212.25.162.9
username: anonymous 
password: fe7feeng

Ottieni le informazioni contenute in /etc/BlackoutResurrection

Collegandoci via SSH al terzo server si poteva notare che il file da leggere era di proprietà dell’utente proxy, quindi serviva nuovamente una privilege escalation.

Una cosa che da subito colpiva era la presenza di una cartella /develop contenente diverse sottocartelle con alcuni file sorgenti, una delle quali aveva una data di creazione diversa dalle altre: context_switch.

Purtroppo come anticipato non abbiamo avuto abbastanza tempo per poter completare questo ultimo step, ma siamo lieti di lasciarvi alcuni link a soluzioni di altri partecipanti:

Speriamo di ricevere le vostre soluzioni così da poterci confrontare!

Ringraziamo Seeweb per l’ottimo contest e facciamo i nostri complimenti ai 3 finalisti che verranno annunciati sulla pagina Facebook di Seeweb.

7 min

Data

28 aprile 2015

Autore

smaury

Sono Abdel Adim Oisfi più conosciuto come smaury.
Lavoro: CEO, Security Researcher, Penetration Tester in Shielder.
Passioni: Hacking, autostop, tuffi e ginocchia sbucciate.