Replying to GUIDA - HackThisSite.org Basic 1-10

  • Create account

    • Nickname:
  • Enter your Post

    •              
           
       
      FFUpload  Huppy Pick colour  HTML Editor  Help
      .
    •      
       
      File Attachments    Clickable Smilies    Show All
      .
  • Clickable Smilies

    • :huh:^_^:o:;):P:D:lol::B)::rolleyes:-_-<_<:)
      :wub::angry::(:unsure::wacko::blink::ph34r::alienff::cry::sick::shifty::woot:
      <3:XD:*_*:];P:XP:(:=)X):D:>.<>_<
      =_=:|:?3_3:p:;_;^U^*^^*:=/::*::b::f:
  • File Attachments

    • ForumCommunity Hosting   jpg gif png zip ...

      Descr.:
      Image Hosting: host it!

  •   

Last 10 Posts [ In reverse order ]

  1. Posted 25/8/2016, 17:33
    Se sei nuovo nel mondo dell'hacking e vuoi cimentarti o vuoi testare le tue conoscenze, Hack This Site fa al caso tuo!
    Hack This Site è un sito che fornisce varie sfide di difficoltà incrementale in cui cimentarsi senza il rischio di incorrere in problemi legali e magari imparando qualche nuova tecnica da usare seguendo comunque una certa etica.

    Prima di iniziare!
    Il mio consiglio è di utilizzare un browser come Mozilla Firefox (o in alternativa Google Chrome) nonostante non sia impossibile svolgere le missioni utilizzandone di diversi. In associazione con Mozilla Firefox suggerisco di scaricare l'estensione Firebug che permette di visualizzare il codice sorgente delle pagine, fornisce uno strumento di debug interattivo passo passo e permette di mandare messaggi in consolle mediante l'utilizzo di javascript.

    Basic 1 - 10
    Le sfide proposte nella sezione Basic richiedono una conoscenza base di HTML, javascript, UNIX e SSI. Di seguito lascerò dei link nei quali potersi informare per ottenere queste basi. Inoltre, ciascuna missione del livello basic prevede una pagina di autenticazione in cui inserire una password più altri file da hackerare cosi da ottenere la password necessaria per proseguire al livello successivo.
    Iniziamo.

    Basic 1
    Come suggerisce l'aiuto
    CITAZIONE
    If you have no idea what to do, you must learn HTML(aka source file).

    HTML sta per Hyper Text Markup Language. Sostanzialmente, ogni pagina web che visiti è stata creata usando HTML. Se non lo sapessi, anche tu puoi visualizzare il codice sorgente di una pagina web semplicemente cliccando ctrl-U su Mozilla Firefox e Chrome (cmd-U se usi mac) o semplicemente cliccando col tasto destro sulla pagina e selezionando "visualizza codice sorgente" in Safari (è possibile aggiungere al menu di Safari il tab "Sviluppo" e google ti può venire in aiuto).
    Una volta visualizzato il codice sorgente della pagina dovrai cercare il tag HTML per i commenti:
    CODICE
    <!--Questo è un commento che non viene visualizzato dal browser-->

    All'interno del commento sarà presente la password che ti permetterà di accedere al livello successivo!

    Basic 2
    Okay, come prima cosa occorre leggere la descrizione del problema:
    CITAZIONE
    Network Security Sam set up a password protection script. He made it load the real password from an unencrypted text file and compare it to the password the user enters. However, he neglected to upload the password file…

    Dunque, se lo script (che assumiamo funzioni correttamente) controlla se c'è una corrispondenza tra la password inserita dall'utente e la password presente nel file non criptato creato da Sam, occorre inventare un modo per trovare il file.. Ma Sam ci ha facilitato il lavoro essendosi scordato di caricarlo. Quindi essendo null, anche la nostra password sarà tale. Non inserire nulla e tutto andrà a buon fine ;)

    Basic 3 -
    CITAZIONE
    This time Network Security Sam remembered to upload the password file, but there were deeper problems than that.

    Iniziamo con la visualizzazione del codice sorgente della pagina.
    CODICE
    <form action=”/missions/basic/3/index.php” method=”post”>
    <input type=”hidden” name=”file” value=”password.php” />
    <input type=”password” name=”password” /><br /><br />
    <input type=”submit” value=”submit” /></form>

    Quello che salta all'occhio è :
    CODICE
    <input type=”hidden” name=”file” value=”password.php” />

    Tutto ciò che c'è da fare è completare il link con password.php e copiare la password presente in questa pagina nel campo e proseguire al prossimo livello.
    Ricorda: il codice in file php, comunque, non è visualizzabile SOLAMENTE se è racchiuso tra i tag php! Tutto ciò che è al di fuori dei tag php è visualizzatile!

    Basic 4 - Inline Javascript
    CITAZIONE
    This time Sam hardcoded the password into the script. However, the password is long and complex, and Sam is often forgetful. So he wrote a script that would email his password to him automatically in case he forgot.

    Come al solito la prima cosa da fare è controllare il codice sorgente.
    CODICE
    <form action=”/missions/basic/4/level4.php” method=”post“>
    <input type=”hidden” name=”to” value=”webmaster@hulla-balloo.com” /><input type=”submit” value=”Send password to Sam” /></form></center><br /><br /><center><b>Password:</b><br />
    <form action=”/missions/basic/4/index.php” method=”post“>
    <input type=”password” name=”password” /><br /><br /><inputtype=”submit” value=”submit” /></form>

    Come è possibile notare, è stato inserita in un hidden input tag l'email del nostro amico Sam. Niente di più facile , quindi, farsi recapitare una email contenente la password al posto di Sam. Ci sono varie metodologie per farlo: la prima, nonché la più semplice, prevede l'utilizzo di tool che ti permettano di alterare il codice sorgente di una pagina seppure solo in lato client (per intenderci: dal tuo computer. Non puoi modificare la struttura di una pagina web da lato server cosi facilmente!). Un tool che fa al caso nostro è proprio firebug nel quale basta semplicemente modificare il sorgente ed il gioco è fatto.
    Il secondo metodo implica la copia del codice sorgente su uno strumento di textedit e la modifica su di esso. Dopodiché occorrerà salvare il file ottenuto nel formato corretto (.php o .html) e l'esecuzione mediante browser.
    Il terzo e ultimo metodo verrà spiegato nel successivo livello.

    Ad ogni modo è importante notare che l'hidden input tag rimane hidden fintanto che non venga controllato il codice sorgente!

    Basic 5
    Il livello 5 è molto simile al precedente ma è stato aggiunto uno script che valida l'autenticazione qualora la richiesta provenga dal server. Per quanto spiegato prima non dovrebbe essere possibile agire in locale usando tool o notepad ma occorre inventare qualcosa di nuovo.
    Userai le Inline Javascript (alla fine della guida ti linkerò una pagina dove farti una idea più approfondita di cosa siano). Per ora ti basti sapere che ogni elemento in una pagina web è alterabile mediante queste Inline Javascript. Ritornando a noi, ciò che devi fare è alterare il campo della email di Sam. Per farlo devi inserire questa riga di codice nella barra degli indirizzi (NB: se il tuo browser ha una barra degli indirizzi che funziona anche da barra di ricerca devi assicurarti di aver selezionato un indirizzo):
    CODICE
    javascript:void(document.forms[0].to.value="TUA EMAIL");

    Questo codice indica che stai usando una funzione javascript void, ossia che non restituisce nulla, la quale agisce sulla pagina corrente (document) e in particolare sulla prima form (la numerazione parte da 0) ed in particolar modo sul campo di nome to. Ciò che fai sul campo di nome to è quello di modificarne il valore in "TUA EMAIL".
    Detto questo, dovresti riuscire a passare al livello successivo.

    Basic 6 - Encryption
    CITAZIONE
    Network Security Sam has encrypted his password. The encryption system is publically available and can be accessed with this form.

    Sappiamo dunque che Sam si è dato alla crittografia utilizzando però un sistema di crittografia pubblico (nonché molto semplice). Noi, inoltre abbiamo a disposizione la password criptata e un tool che ci permette di criptare delle stringhe di nostro piacimento, utile per poter scoprire quale sistema sia stato adottato.
    Iniziamo dunque a provare di comprendere quale sistema sia stato utilizzato:
    - inseriamo la stringa '111111' e quello che ci viene restituito è ‘123456‘
    - inseriamo il carattere 'a' e quello che ci viene restituito è 'a'
    - inseriamo la stringa ‘ABCDEF‘ e quello che ci viene restituito è la stringa ‘ACEGIK‘
    Salta subito all'occhio che il primo elemento della stringa rimane invariato e che gli elementi successivi cambiano in base alla loro posizione.
    La formula usata per criptare è la seguente:
    CODICE
    Codice ASCII del carattere criptato = n + (Codice ASCII del carattere non criptato)

    dove n è la posizione del carattere.
    Per decriptare occorre usare la formula inversa e fare riferimento alla tabella ASCII.

    Di seguito c'è un piccolo esempio di come funziona passo passo la funzione che cripta la stringa.
    Prendiamo come esempio la stringa ABCDEF
    ABCDEF
    012345

    A = 0 + A
    C = 1 + B
    E = 2 + C
    G = 3 + D
    I = 4 + E
    K= 5 + F


    Questa tecnica è chiamata ASCII Shifting.

    Basic 7 - Unix
    CITAZIONE
    This time Network Security Sam has saved the unencrypted level7 password in an obscurely named file saved in this very directory.

    Come dice la descrizione, sappiamo che la password per il livello successivo è in un file di cui non sappiamo il nome nella stessa directory in cui ci troviamo noi. Inoltre, come da titolo, sappiamo che ci imbatteremo in comandi Unix. I comandi da usare in questo specifico esercizio sono banali e principalmente riguardano la gestione delle directory.

    CITAZIONE
    In other unrelated news, Sam has set up a script that returns the output from the UNIX cal command. Here is the script.

    Da questa parte della descrizione sappiamo anche che Sam usa uno script che restituisce un Output del comando Unix cal (per visualizzare il calendario). In poche parole questo script richiama questo comando:
    CODICE
    cal [ANNO INSERITO]


    Il server quindi si aspetta che venga inserita una stringa contenente un anno, ma cosa accadrebbe se inserissi oltre che all'anno altri comandi Unix?
    CODICE
    2016 && ls

    && indica la concatenazione di un altro comando mentre ls restituisce la lista dei file presenti nella directory.
    (In Unix si possono concatenare due comandi anche usando ";")
    Lo script quindi, oltre al calendario stamperà anche i nomi dei file presenti nella stessa directory, tra cui anche quello contenente la password per il prossimo livello ;)

    Basic 8 - SSI
    CITAZIONE
    Sam remains confident that an obscured password file is still the best idea, but he screwed up with the calendar program. Sam has saved the unencrypted password file in /var/www/hackthissite.org/html/missions/basic/8/

    However, Sam's young daughter Stephanie has just learned to program in PHP. She's talented for her age, but she knows nothing about security. She recently learned about saving files, and she wrote a script to demonstrate her ability.

    Sappiamo che la password è salvata nel server ed in particolare nella nostra stessa directory. Dovremmo quindi aver intuito che per poter prelevare i dati dal server verranno usati dei comandi Unix.
    Se proviamo a scrivere i comandi Unix nel form "Enter your name" della figlia di Sam, però, non riusciamo a ottenere nulla di concreto se non la visualizzazione del lavoro svolto dalla figlia di Sam. Andremo a usare dunque le SSI. In particolar modo useremo questo codice:
    CODICE
    <!--#exec cmd="ls .."-->

    Usiamo #exec per indicare che dobbiamo eseguire qualcosa (un comando, cmd).

    Un appunto va a "ls ..": se usassimo solamente ls otterremmo la lista di file presenti nella sottocartella tmp e non nella directory padre. L'uso di ".." indica di non considerare la directory attuale ma la directory padre.

    Una volta fatto ciò ci verrà stampata a video la lista dei file presenti nella stessa directory della pagina index.php, tra cui il file contenente la password.

    Basic 9
    CITAZIONE
    Network Security Sam is going down with the ship - he's determined to keep obscuring the password file, no matter how many times people manage to recover it. This time the file is saved in /var/www/hackthissite.org/html/missions/basic/9/.

    In the last level, however, in my attempt to limit people to using server side includes to display the directory listing to level 8 only, I have mistakenly screwed up somewhere.. there is a way to get the obscured level 9 password. See if you can figure out how...

    This level seems a lot trickier then it actually is, and it helps to have an understanding of how the script validates the user's input. The script finds the first occurance of '<--', and looks to see what follows directly after it.

    Dalla descrizione si può evincere che anche in questo caso si useranno le SSI. Ma dove?
    La risposta risiede nella form realizzata dalla figlia di Sam.
    CODICE
    <!-- #exec cmd="ls ../../9" -->

    La navigazione in trasversale delle directory è possibile ed è anche una fonte molto alta di rischio per la sicurezza delle pagine!

    Basic 10
    CITAZIONE
    This time Sam used a more temporary and “hidden” approach to authenticating users, but he didn’t think about whether or not those users knew their way around javascript…

    Come suggerisce la descrizione bisogna pensare a un qualcosa di temporaneo e nascosto che possa permettere l'autenticazione di un utente. La risposta sono i cookie ossia delle piccole porzioni di dati salvati dal server nei client che contengono varie informazioni tra cui delle variabili. Generalmente sono criptati, ma in questo caso no.
    Anche per questo livello si può procedere in maniere diverse. Si può accedere ai cookie mediante tool come firebug che ti permettono anche di modificarli oppure utilizzando Inline Javascript.
    Seguirò la seconda opzione.
    Innanzi tutto , occorre cercare nei cookie ciò che fa al caso nostro. Per poter leggere i cookie, occorre utilizzare questa riga di codice:
    CODICE
    javascript:alert(document.cookie);

    Una volta visualizzati i cookie ne salterà subito uno agli occhi: level10_authorized con valore settato a "NO".
    Per andare a modificare questo cookie basterà semplicemente eseguire questo altro Inline Javascript:
    CODICE
    javascript:void(document.cookie="level10_authorized=yes");

    Facendo questo si avrà accesso all'ultimo livello della sezione Basic!

    Link Utili!

Review the complete topic (launches new window)