Sto aiutando il mio amico a finire il suo modulo per un sito web. Dalla mia prima impressione guardando i suoi moduli, ho trovato alcune cose molto pericolose, ma lui dice che questo metodo è sicuro. file esiste (inc/test/bar.php);:Test della vulnerabilità null byte
Parte del codice:
session_start();
if(isset($_POST['foo']))
{
$_SESSION['foo'] = $_POST['foo'];
}
if(isset($_SESSION['foo']))
{
$foo['foo'] = $_SESSION['foo'];
}
if(is_file("inc/". $foo['foo'] . "/bar.php")) {
// code
}
else {
// code
}
Nota
ho voluto mettere alla prova il suo codice, e ho mandato le seguenti richieste:
POST :: foo => test/bar.php% 00
POST :: foo => test/bar.php \ 0
curl_setopt ($ ch, CURLOPT_POSTFIELDS, 'foo = test/bar.php'. chr (0x00));
Ma nessuno di questi metodi ha funzionato. Questo codice è davvero sicuro? e come qualcuno potrebbe inviare un byte null per bypassare la sua sicurezza. Voglio dimostrare al mio amico che il suo codice non è sicuro.
Non sono un esperto di php quindi lascerò questo come commento, ma non potresti passare qualcosa come "../../. ./../ "e ottenere un accesso arbitrario al file system? –
@ChrisThompson ha "/bar.php" alla fine quindi controllerà ../../../bar.php in tutti i casi – John
ok, quindi è solo una minaccia se si sta potenzialmente accedendo a _some altro_ ' bar.file php' che non dovresti accedere a –