Il Local File Disclousure/ Download (o più semplicemente LFD), è un tipo di attacco simile al LFI( Local File Inclusion), con la differenza che i file vengono letti e non inclusi.
Un esempio di codice PHP afflitto da LFD potrebbe essere questo:
La funzione readfile() serve a leggere il contenuto di un file e, in questo modo, leggerà il contenuto del file dichiarato nella variabile $pagina.
Cosa può farci un attaccante con questo codice?
Potrebbe fare una richiesta del tipo:
http://www.informaticalab.com/test.php?pagina=../../../../../../etc/passwd
In questo modo, il contenuto di etc/passwd verrà stampato nella pagina (ma non incluso).
Alcune funzioni che possono permette questo attacco:
- file_get_contents : Legge l’ intero file in una stringa
- readfile : Mostra il contenuto di un file
- file : Legge l”intero file in un’ array
- fopen : Apre un file o un URL
- highlight_file : Evidenzia il codice contenuto in un file seguendo i colori stabiliti nel php.ini (sintassi per PHP).
- show_source : come highlight_file
Per fixare questo bug, basta disinibire l’ uso di caratteri speciali nelle variabili, o fixare il punto (e possibilmente anche le slash).