Prima di iniziare voglio precisare che non ho intenzione di spiegare come sfruttare questa vulnerabilità per fare danni (uso di shell…), ma è più una spiegazione sul come una RFI funziona, con qualche consiglio per risolvere questo problema nel caso venga riscontrato su di un sito.
Allora, in questa guida verrà analizzato del codice PHP, che è anche uno dei più usati: per chi non lo sapesse il PHP è un linguaggio di scripting lato server.

Bene, però per capire bene il funzionamento delle RFI è sufficiente conoscere due importanti comandi del PHP: GET e include.
Il comando GET serve ad impostare il valore di una variabile, ricavandolo direttamente dall’url della pagina, esempio:

http://www.sitoacaso.it/pagina.php?variabile=valore

<?PHP
$variabile=$_GET[‘variabile’];
echo $variabile;
?>

questi comandi non fanno altro che ricavare il valore di variabile (valore) dall’url appunto, e metterlo in $variabile (detto semplicemente) e stamparlo sulla pagina.
L’altro comando (include), permette di includere una pagina nella pagina in cui è contento il comando:

<?PHP
include(‘ciao.php’);
?>

questo include la pagina ciao.php nella pagina che si sta visualizzando (quella che contiene il codice sopra descritto).
Bene, ora che sappiamo questo possiamo cominciare a vedere come usarli insieme:

http://www.sitoacaso.it/pagina.php?pagi…re=pag.php

<?PHP
$pagina = $_GET[‘paginadaincludere’];
include($pagina);
?>

oppure

<?PHP
include($_GET[‘paginadaincludere’]);
?>

bene questo codice prende il valore di paginadaincludere dall’url (cioè pag.php) e la include nella pagina.
Però questo presuppone, piuttosto ingenuamente, che noi includiamo una semplice pagina… ma se non fosse così??? Se noi al posto di pag.php includessimo del codice maligno??? Ebbene sta proprio quì la pericolosità delle RFI. Infatti il PHP in quanto linguaggio di scripting lato server permette di far eseguire del codice (in PHP) inserito in un file (con estensione .txt, .jpg, ecc basta che non sia .php se no viene eseguito in locale e non sul server) che non è hostato sul server da cui viene eseguito.

Ora che sappiamo che cosa è, possiamo cercare nei sorgenti del nostro sito Web se è presente questa vulnerabilità… E se la trovassimo?? Cosa dovremmo fare per evitare problemi???
Allora, ci sono due principali modi per risolvere questo problema:
il primo è usare una selezione (if..else..ecc), l’altro, molto più semplice, è trasformare la nostra RFI in una LFI cioè Local File Include.
È sufficiente inserire nel codice del nostro sito web questi semplici comandi al posto di quelli visti prima:

<?PHP
$pagina = $_GET[‘paginadaincludere’];
include($_SERVER["HTTP_HOST"] . "/dir/" . $pagina);
?>

ora vediamone il funzionamento. Il codice messo con l’include (cioè quello fra parentesi) non fa altro che controllare che il file che viene incluso (cioè il valore di paginadancludere che viene messo in $pagina) sia contenuto nella cartella /dir/ del nostro sito. Ovviamente dobbiamo controllare che in quella cartella non siano presenti file che ne rendano inutile l’uso (tipo shell)!!!