Es un carácter de byte nulo .
Se usa si el código siempre agrega una extensión al archivo incluido. Por ejemplo, si el código es
<?php
include($_GET['lang'].".php");
?>
Sin embargo, usted, como atacante, desea leer ../../etc/passwd
utilizando el LFI. Si usa el carácter de byte nulo, puede adjuntarlo a la URL de solicitud como %00
:
www.example.com/index.php?lang=../../etc/passwd%00
Esto hará que el procesador PHP se detenga en el byte nulo e incluirá el archivo ../../etc/passwd
en lugar de la ruta ../../etc/passwd.php
que no funcionará debido a la extensión. Entonces, en resumen, le da al atacante una forma de truncar la ruta en un punto determinado y eliminar cualquier extensión no deseada.
Con respecto a la codificación base64, esto podría ser para evitar que el byte nulo se "pierda" en tránsito. Si utiliza cualquier mecanismo para transferir la URL a otro lugar, el software utilizado podría terminar la cadena en el byte nulo y esto se eliminaría de la URL. Un ejemplo es si pega una URL en Firefox, a menudo la cadena termina en el byte nulo y la solicitud de la página cuando se realiza no incluye el carácter de byte nulo.