Sto cercando di capire come gli attacchi di null byte injection nel codice PHP abbiano funzionato prima che venissero rattoppati in PHP 5.3.4. Ho questa pagina HTML di esempio che è una versione leggermente modificata di ciò che è mostrato qui :
<?php
var_dump($_GET);
echo '<br>';
$file = $_GET['file'];
$path = '/var/www/' . $file . '.php';
echo $path;
if (file_exists($path)) {
echo "file exists!";
include $path;
}
?>
Questo codice è in esecuzione su un sistema Ubuntu 12.04 con PHP 5.2.17. Mi aspetterei un URL come http://localhost/?file=../../../etc/passwd%00
per funzionare, ma invece vedo %code%
stampato letteralmente nella stringa:
array(1) { ["file"]=> string(21) "../../../etc/passwd<?php
var_dump($_GET);
echo '<br>';
$file = $_GET['file'];
$path = '/var/www/' . $file . '.php';
echo $path;
if (file_exists($path)) {
echo "file exists!";
include $path;
}
?>
" }
/var/www/../../../etc/passwdarray(1) { ["file"]=> string(21) "../../../etc/passwd%pre%" }
/var/www/../../../etc/passwd%pre%.php
.php
Che cosa sto sbagliando? In che modo posso ottenere attacchi con null byte injection sul mio computer locale?