La inyección de bytes nulos en PHP se refiere a cómo se manejan los bytes nulos en las operaciones del sistema de archivos. Si un atacante puede inyectar un byte nulo en una ruta de archivo, la función C subyacente ignorará cualquier cosa después del carácter malicioso. Se puede usar para evitar restricciones como la extensión del archivo deseado.
El siguiente ejemplo es de php.net:
<?php
$file = $_GET['file']; // "../../etc/passwd<?php
$file = $_GET['file']; // "../../etc/passwd%pre%"
if (file_exists('/home/wwwrun/'.$file.'.php')) {
// file_exists will return true as the file /home/wwwrun/../../etc/passwd exists
include '/home/wwwrun/'.$file.'.php';
// the file /etc/passwd will be included
}
?>
"
if (file_exists('/home/wwwrun/'.$file.'.php')) {
// file_exists will return true as the file /home/wwwrun/../../etc/passwd exists
include '/home/wwwrun/'.$file.'.php';
// the file /etc/passwd will be included
}
?>
enlace
En este caso, la extensión '.php' se ignorará durante las operaciones del archivo si el usuario envía un carácter nulo al final del parámetro del archivo. Combinado con una cadena transversal de directorio, permite al atacante "incluir" archivos arbitrarios que se divulgarán.