venerdì 5 gennaio 2007

Giocando con strumenti di sicurezza Javascript

Un amico mi ha indirizzato su uno di quei siti che offrono un percorso a livelli in cui si devono trovare password o aggirare protezioni di crescente difficoltà. La maggior parte di queste sono in javascript.
Al momento non sono in vena di dissertare sulla delega a questo linguaggio di scripting delle funzioni di validazione di input o di autenticazione in generale. Non andrò oltre un "non fatelo!" : aggirare javascript è davvero banale, soprattutto con i tool vari per gli sviluppatori in ambito web (per esempio due plugin di firefox: web developer per editare i form (e molto altro), firebug per js debugger e console).. ma di questo parlerò un'altra volta, direi..

oggi sono finito su una paginetta in cui un form fatto a forma di tastierino numerico vi permette di inserire delle cifre, al soddisfacimento di alcune condizioni si verrà reindirizzati sulla pagina .html. Ovviamente i più l33t tra voi ne avranno viste a centinaia, ma visto che il mio amico non sapeva come affrontarlo, spiego il procedimento che ho seguito

La "sicurezza" in un sistema del genere è che ci vogliono molti tentativi per passarlo. ovviamente leggendo il codice javascript si riesce a risolvere qualcosa, del tipo:
il codice deve essere lungo 5 cifre ed il suo prodotto è 3780.

primo passo:
il tastierino numerico va da 1 a 9, per cui cerchiamo i fattori:
riporto 3780 ai numeri primi.. per cui ho 2 2 3 5 7 9. ho una cifra in più.. poco male, gli unici prodotti che stanno ancora in una cifra sono 2*2 e 2*3. per cui le due combinazioni su cui lavorare sono

25679
34579

per calcolare tutte le condizioni ho fatto uno script shell stupido formato da 5 cicli for innestati. Ma questo è ovviamente uno spreco perchè è inutile provare la combinazione 22222 ..
per ovviare a questo ogni ciclo for controlla ad ogni tche l'indice corrente sia diverso dagli indici dei cicli esterni e lancia, nel caso sia verificata la condizione, l'eventuale ciclo interno.

per ora nel ciclo interno (al verificarsi della condizione descritta sopra) c'è ancora un echo per verificare visivamente che le condizioni siano rispettate.
ora arriviamo al dunque: devo verificare la presenza della pagina web. per questo mi servo di curl (ma si potrebbe benissimo usare wget o lynx); indicando con $code la combinazione corrente ho:
curl /$code.html -I 2> /dev/null | egrep '^HTTP.*200' && echo $code

così ho direttamente in output il codice giusto.. ora posso aprire il mio browser preferito ed andare all'indirizzo indicato dal codice.. e passare al livello successivo

Nessun commento: