Questo era un piccolo esperimento risalente al 2020: avevamo tentato di creare un video che accompagnasse questo post per permettere agli utenti di scegliere quale media prediligere. In tanti hanno segnalato il video a youtube non comprendendone lo scopo educativo.
In passato abbiamo più volte invitato coloro che erano interessati all’hacking a mettersi, eventualmente, alla prova con siti sicuri e progettati apposta per permettere agli utenti di “allenarsi” ed imparare: hackthissite.org è una di queste pagine.
Segnaliamo che, prima di pubblicare questo post ed il video, abbiamo chiesto esplicitamente e per iscritto, via e-mail, il permesso ad hackthissite.org che ce l’ha gentilmente concesso dopo aver visionato il materiale.
Iscrivendosi ad Hack This Site! sarà possibile accedere a delle sfide (o challenges) di hacking divisi in vari livelli. Logicamente, per iniziare queste prove sarà necessario avere delle minime basi di informatica: andare a cercare le soluzioni già pronte senza capire il processo con cui si arriva alla conclusione del livello non ci aiuterà in nessun modo.
Per questa parte ciò che viene richiesto è un po’ di curiosità, buon senso e qualche piccola conoscenza di HTML e, volendo avanzare, di JS (Java Script). Vedremo, procedendo nel nostro percorso che il vero senso dell’hacking si trova nella parola stessa: “tagliare”, in specifico, parti di codice inserendone dei nuovi. In altre parole, è come un puzzle in cui si provano i vari pezzi vedendo quale può essere più indicato per ciò che intendiamo costruire.
Diamo quindi un’occhiata al livello base ed approfittiamone, analizzandolo, per ripassare e spiegare i fondamenti. In questo modo ci sarà possibile:
- Imparare qualcosa degli errori più sciocchi a cui, spesso e volentieri, non pensiamo.
- Ripassare cose che, tendenzialmente, diamo per scontato.
- Imparare qualcosa in più sulla pragmatica di programmazione.
- Renderci conto di quanto possa essere facile trovare una falla.
- Comprendere cosa vuol dire realmente hacking.
- Ricordare che i libri e lo studio, ci aiutano a comprendere cosa stiamo facendo, ma ci vogliono anche tanta pratica, intuizione e pazienza.
La nostra regola d’oro, che vi consigliamo, e che usiamo per rilassarci mentre ci studiamo i linguaggi di programmazione o proviamo a giocare con l’informatica: mettere della bella musica di sottofondo, possibilmente allegra e che ci carichi un po’ (soprattutto in caso della presenza di “rumori molesti”), ed un po’ di autoironia.
Level 1 (the idiot test)
This level is what we call “The Idiot Test”, if you can’t complete it, don’t give up on learning all you can, but, don’t go begging to someone else for the answer, that’s one way to get you hated/made fun of. Enter the password and you can continue.
[Traduzione: Questo livello lo chiamiamo “Il test dell’idiota”, se non puoi completarlo, non smettere di cercare di imparare tutto quello che puoi, ma, non andare a pregare altri per avere la risposta, perché diverrebbe una scusa per odiarti/prenderti in giro. Inserisci la password e puoi continuare].
Il primo esercizio viene denominato simpaticamente l’idiot test, il test dell’idiota, perché conoscendo un minimo di HTML l’utente saprà subito dove andare a cercare senza il minimo sforzo.
Un piccolo suggerimento ci viene dato anche dalla pagina che ci permette di accedere a questo test: dobbiamo conoscere delle basi di HTML, ciò significa che, molto probabilmente, troveremo la password che ci serve nell’HTML della pagina del test. Attenzione: ogni utente avrà una password diversa quindi copiare ed incollare la nostra non servirà a nulla.
Cos’è l’HTML?
Si tratta di un acronimo che indica l’HyperText Markup Language (ovvero, il linguaggio a marcatori utilizzato per ipertesti). In altre parole, dietro alla pagina web che stiamo osservando c’è un linguaggio di programmazione che ha permesso quella particolare impaginazione che vediamo tenendo conto anche del posizionamento delle immagini e delle funzioni basilari quali l’inserimento di login e password. Chiunque si approcci per la prima volta alle tecnologie multimediali incontra questo tipo di linguaggio. Il peggior modo di impararlo è avere un professore che detta/scrive l’HTML e lo fa copiare di sana pianta ai propri studenti. Il miglior metodo per impararlo? Provare e sbagliare da soli, creando una propria pagina web semplice, tipo blog, cercando idee e soluzioni osservando l’HTML di altri siti; ricordandosi, però, una delle cose più importanti che qualsiasi programmatore dovrebbe fare: utilizzare i commenti e suddividere il proprio lavoro in sezioni facili da gestire e navigare così dal rendere semplice anche il lavoro di correzione degli errori.
Chiunque, soprattutto chi è totalmente negato e non sa utilizzare il computer, trafficando con il proprio browser ha incontrato una pagina che ogni tanto si apre con segni e diciture astruse: ecco, quella è l’HTML della pagina che cerchiamo! Firefox ci permette di accedervi con il comando CTRL-SHIFT-I oppure andando sul menu in alto a destra, Web Developer e Toogle Tools, mentre Chrome con CTRL-SHIFT-J.
Se, poi, siamo pigri e non vogliamo leggerci tutta l’HTML della pagina basterà ricercare la parola password ed, eccola, davanti al nostro naso, pronta ad essere inserita!
Level 2
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… [Traduzione: Sam, della sicurezza network, ha predisposto una protezione script per la password. Gli ha fatto caricare la password corretta da un file di testo non criptato e l’ha comparato alla password che l’utente inserisce. Ma comunque, s’è scordato di caricare il file della password…]
Dal nostro punto di vista, invece, è il livello 2 il “Test dell’idiota” sia perché potrebbe essere superato per errore e distrazione, sia perché è una delle prime cose che si imparano studiando i possibili errori in HTML: la soluzione è troppo scontata anche solo per dirla e se vi bloccate qui, una volta trovato come superare il livello vi consigliamo di farvi una risata perché sicuramente non avrete pensato alla cosa più semplice che potevate fare!
Ma guardiamo comunque più a fondo: Sam ha scordato di caricare il file con cui comparare la password che l’utente inserisce. La pagina, quindi, secondo quanto specificato al suo interno nell’HTML dovrebbe prendere il codice password corretto e confrontarlo con quello inserito: senza la presenza di questo file, in cui il codice dovrebbe trovarsi, il sistema si comporta come descritto dalla propria programmazione, ma con cosa confronta la password inserita? La risposta a questa domanda coincide con la risposta alla soluzione di questo livello.
Level 3
This time Network Security Sam remembered to upload the password file, but there were deeper problems than that.
[Traduzione: Questa volta Sam, della sicurezza network, si è ricordato di caricare il file con la password, ma ci sono dei problemi più profondi di questo].
Questo livello, se è stato capito il primo esercizio, è facile ma ci vuole giusto un pochina d’intuizione in più. Anche questa volta cerchiamo nella fonte HTML la password dove troviamo che Sam ha caricato, effettivamente, il file che ci interessa che è un file in formato .php il problema è che questi non solo non è criptato, ma è possibile aprirlo senza difficoltà.
Con questo piccolo esercizio, un principiante può rendersi conto veramente di quanto sia importante criptare i dati.
Il momento in cui l’utente inserisce il proprio login e password il sito interessato va a controllare, secondo quanto programmato, nel suo archivio che i dati inseriti coincidano: in questo modo renderà disponibile l’accesso. Se però chi ha creato il sito è un principiante e come Sam ha dimenticato od omesso alcuni accorgimenti è facile trovare qualche falla come quella qui dimostrata.
QUALCHE ALTRA NOTA SULL’HTML…
Alla fine dell’articolo riportiamo l’immagine dell’HTML dei tre esercizi qui sopra spiegati: approfittiamone per osservare la parte su cui ci siamo concentrati ed alcune piccole specifiche.
La prima cosa da sottolineare è la presenza di un commento, in Basic 1, che si riconosce dal suo colore verde e dal fatto che inizia con <!– e finisce con –> (per la cronaca, invece, con linguaggi di programmazione come C++ si utilizzano // e con Python il simbolo #). Il commento permette di scrivere degli appunti che serviranno, eventualmente, a suddividere in sezioni il linguaggio di programmazione ed a permetterne una più semplice correzione e navigazione per il programmatore: essi, infatti, non compariranno sulla pagina web. Se vogliamo imparare a fare programmazione iniziamo ad usare i commenti: renderà tutto più semplice sia per noi che per i nostri colleghi!
L’uso del comando <br> indica un semplice a capo della frase o della sessione; mentre <b> permette di scrivere una frase o una parola in grassetto ma dovremo sempre e comunque ricordarci di usare </b> per chiudere e limitare la funzione alle parti che ci interessa evidenziare; così come <center> e </center> delimitano la porzione di testo che vogliamo centrare nella pagina.
L’elemento <input> è la parte di testo che ci permette di inserire dati (e quindi appunto input); allora, notiamo che abbiamo una scritta <b>password:</b> che sarà sicuramente in grassetto, un a capo sottolineato dalla presenza di <br> ed un <input, preceduto da da <form> il quale permette di aprire tale sezione o modello (questi ci invierà, per esempio, in una pagina sul server chiamata “/missions/basic/1/index.php”); l’input in questione crea un rettangolo nel quale la password può essere inserita. Allo stesso modo la stringa <input type=”submit” value=”submit”> genera un bottone da cliccare per inviare la password che l’utente inserirà: se dovessimo modificare il valore ovvero value=”submit” con, per esempio, value=”hello” allora comparirà un bottone con la scritta hello anziché submit!
Prossimamente daremo un’occhiata anche ai livelli 4 e 5 che sebbene praticamente identici risulteranno, sicuramente, un po’ più interessanti e ci permetteranno di fare un piccolo passo in avanti nella comprensione dell’hacking.
Lascia un commento