Una volta mappata l'applicazione, possiamo iniziare ad analizzare il suo codice senza troppi sforzi. lo studio del codice lato client ci fornirà informazioni sulle metodologie di controllo dell'input, su eventuali inclusioni di funzionalità esterne, nei siti che implementano Ajax sapremo anche quali e quanti dati il server ci invia e in che formato.
Il primo passo è la verifica della sicurezza dei controlli lato client.
Trasmissione delle informazioni e di parametri
Sappiamo che il protocollo http è senza stato (stateless), ciò significa che tra una richiesta e l'altra non vi è nessun collegamento. Se questo è vero e oggettivo a livello di protocollo, è altrettanto necessario ricorrere a diversi metodi per permettere alle informazioni di transitare all'interno di una sessione (che comprende più scambi request / response).
Per i programmatori: esistono diversi metodi per inviare informazioni da una pagina all'altra in una applicazione web, nessuno è più efficace di un altro, dobbiamo solo capire quale è quello giusto per i nostri scopi. Il metodo più immediato e apparentemente più semplice per inviare dati da una pagina all'altra è il metodo get tramite parametri inseriti nella querystring.
Esempio:
www.miosito.it/pagina1.html?param1=amministratore¶metro2=autenticato
La query string può contenere parametri che vengono trasportati attraverso l'applicazione per mantenere uno stato o brevi informazioni utili al server al momento della creazione della pagina. Questo metodo, che quasi sicuramente troverete durante un test, quasi mai contiene informazioni sensibili se non forse qualche id sessione che potrebbe tornare utile (ma lo vedremo poi).
Altro metodo molto utilizzato per trasmettere parametri da una pagina all'altra è l'utilizzo in un form del parametro hidden che contiene il valore da inviare (l'invio avviene generalmente tramite il metodo post ma può essere anche altro). In pratica, il programmatore crea un form e inserisce al suo interno un valore nascosto che viene inviato in maniera trasparente all'utente. Ad esempio :
<form name="miaform" method="post" action="inviaildatonascosto">
<input name="miapassword" type="hidden" value="password" />
</form>
Questo metodo, a volte permette di risalire a informazioni che dovrebbero rimanere protette ma che per la nostra natura di curiosi vengono scovate.
L'utilizzo di un web proxy ( per esempio Burp ) ci permette di intercettare il codice inviato e ricevuto in una sessione web, modificando a nostro piacimento la struttura e i dati della pagina prima di inviarla al server.
Un altro utilizzo importante del codice lato client è la validazione lato client dell'input dell'utente. Sappiamo che ogni volta che digitiamo qualcosa in una text box o altro di una pagina web e inviamo la pagina questa informazione viene inviata al server che la processa. Senza entrare nel merito (lo vedremo poi) dirigiamo la nostra attenzione su come aggirare i controlli lato client.
Il controllo lato client più diffuso è l'inserimento di username e password e la verifica che il codice inserito non sia nocivo. Il nostro modulo di autenticazione richiederà l'inserimento di nome utente e password e, per volontà del programmatore, non accetterà tutti i caratteri potenzialmente pericolosi (<, >, ', ", /, e tanti altri).
Il processo di validazione dell'input avviene in quest'ordine
- L'utente digita username e password
- L'utente clicca invio
- L'applicativo verifica lato client la validità dell'input
- L'applicativo invia al server i dati username e password.
Tramite l'utilizzo di un proxy possiamo intercettare la pagina tra gli step 3 e 4 e modificando il sorgente della pagina possiamo inviare al server l'input che vogliamo (visto che la validazione lato client è già stata superata!).
L'analisi del codice lato client di fornisce anche informazioni che lo sviluppatore potrebbe aver lasciato all'interno del sorgente. Molti programmatori inseriscono data, firme, recapiti e altro all'interno del codice html. Altri dimenticano pezzi di codice commentati all'interno del codice html o degli script integrati o inclusi nella pagina.
Importantissimo nell'analisi lato client è anche il recupero di tutte le informazioni (sorgenti compresi) dei file JavaScript che in un qualche modo sono correlati all'applicazione. Se per esempio il controllo di validazione di cui sopra fosse un file js esterno e non avessimo a disposizione un web proxy? Beh, possiamo salvare la pagina web che contiene il modulo di login sul nostro Pc. Individuare il percorso del file .js (incluso nei tag script del codice html) che opera il controllo dell'input e salvarlo sulla nostra macchina. Modificare il file js a nostro piacimento (per fargli accettare gli input che vogliamo). Rimappare l'inclusione dello script (modificando il percorso del file originario con il percorso locale dove abbiamo salvato il file .js modificato. Aprire la pagina con un browser. E inviare la form.
In questo modo il server (con una buona probabilità) riconoscerà la pagina come se provenisse da una navigazione..mentre stiamo inviando la pagina dal file system del nostro Pc.