tags: LFI erroriLFI web local_file_inclusion
Nelle Local File Inclusion gli errori che ci restituisce il server sono molto importanti perchè ci possono suggerire la directory alla quale sta facendo la richiesta e quindi possibilmente anche la rotta alla quale va a cercare la risorsa che ci può suggerire quanti ../ inserire per arrivare alla cartella di root, inoltre ci può anche indicare il tipo di funzione che per esempio php sta utilizzando per chiamare quella determinata risorsa e questo ci può tornare molto utile in caso ci siano dei filtri nella funzione come per esempio l’aggiunta dell’estensione php alla fine di ogni risorsa che impedirebbe per esempio l’accesso al file /etc/passwd perchè la funzione lo trasformerebbe in /etc/passwd.php che è una risorsa inesistente.
Bypass Estensione
Quando ci troviamo di fronte ad un errore che indica che la funzione php ci aggiunge un’estensione al comando dato possiamo usare un trucchetto. Ecco un esempio di errore:
Warning: include(includes/gino.php) [function.include]: failed to open stream: No such file or directory in /var/www/html/lab3.php on line 26
Warning: include() [function.include]: Failed opening 'includes/gino.php' for inclusion (include_path='.:/usr/lib/php5.2/lib/php') in /var/www/html/lab3.php on line 26Come si può vedere da questo output la funzione include aggiunge in automatico l’estensione .php, per ovviare a questo problema possiamo utilizzare un parametro di php in formato esadecimale che ci permette di commentare tutto quello che viene dopo il nostro comando, si tratta di %00 ed un esempio potrebbe essere il seguente:
http://10.10.140.119/lab3.php?file=../../../../etc/passwd%00Questo trucchetto farà si che l’estensione .php non venga aggiunta e quindi la risorsa /etc/passwd ci verrà restituita (il parametro %00 è stato tolto da php dopo la versione 5.3.4).
Bypass filtri visibilità
Un altro tipo di errore che ci può tornare utile è il seguente:
You are not allowed to see source files!Questo errore ci indica che la risorsa estiste ma che noi non siamo in grado di vederla perchè lo sviluppatore ha inserito un filtro, per ovviare a questa situazione possiamo utilizzare due metodi, il primo è quello di inserire dopo l’ultima risorsa /. , mentre l’altra è quella di utilizzare il parametro %00 già visto in precedenza. Ecco due esempi:
http://10.10.140.119/lab4.php?file=../../../../etc/passwd/.
http://10.10.140.119/lab4.php?file=../../../../etc/passwd%00Questo trucco ci permetterà di bypassare il filtro.
Bypass filtro ../
Quando in un url proviamo a fare un attacco dot dot slash e il server ci restituisce un messaggio di errore come il seguente:
Warning: include(includes/etc/passwd) [function.include]: failed to open stream: No such file or directory in /var/www/html/lab5.php on line 28
Warning: include() [function.include]: Failed opening 'includes/etc/passwd' for inclusion (include_path='.:/usr/lib/php5.2/lib/php') in /var/www/html/lab5.php on line 28Possiamo notare che la funzione include ha eliminato tutti i .. e al posto che ../../../../etc/passwd è diventato semplicemente /etc/passwd che non permetterà mai di accedere a quella risorsa, per ovviare a questa situazione possiamo utilizzare un altro trucchetto che consiste nel raddoppiare sia i punti che gli slash bypassando così il filtro, ecco un esempio:
http://10.10.140.119/lab5.php?file=....//....//....//....//etc/passwdQuesto trucchetto funziona perchè php ci elimina tutti i ../, ma siccome noi gli abbiamo raddoppiati quelli che rimarranno saranno proprio quelli che vogliamo che siano.
Bypass forzatura cartella
Può succedere che durante un’attacco dot dot slash ci appaia un errore da parte del server che ci indica che l’unico modo che si ha per accedere ad una determinata risorsa è quello di passare attraverso una determinata cartella perchè lo sviluppatore ha forzato la funzione ad accettare solo le risorse provenienti da quella cartella, un tipico tipo di errore potrebbe essere il seguente:
Access Denied! Allowed files at THM-profile folder only!Per ovviare a questo inconveniente possiamo inserire la cartella definita dall’errore all’inizio del nostro payload facendo quindi credere al server che la richiesta sia legittima, come in questo esempio:
http://10.10.140.119/lab6.php?file=/THM-profile/../../../../etc/passwd