¿Necesita una explicación sobre la inclusión de archivos locales?

1

Hace tan solo unos días, un amigo reparó un lfi en su sitio y me envió la url utilizada, era una url codificada en base 64 pero no es habitual .../../../etc/passwd,

Es: Li4vLi4vZXRjL3Bhc3N3ZAAucG5n

Ahora decodificado en base64decode.org. Obtengo esto:

../../etc/passwd�.png

¿Qué es ese signo de interrogación? Pensé que era un byte nulo, pero parece ser una cosa unicode. No puedo resolverlo. Alguien me puede explicar qué significa, no parece que tenga la misma cadena base64 cuando la codifico de nuevo. Gracias

    
pregunta Daniel Max 09.08.2014 - 01:10
fuente

2 respuestas

2

Es un carácter nulo . Usé este decodificador para guardarlo en un archivo binario que abrí con Notepad++ para verificar. Sea lo que sea que esté haciendo allí, así es como su navegador (como mencionó en el comentario que está usando Firefox) decidió representarlo en la salida.

No es malicioso, ya que no hace nada en absoluto, pero evita que ciertos decodificadores Base64 sigan correctamente un enlace provisto (podría ser un simple truco de confusión para confundir a los rastreadores / arañas automáticos y similares, mientras que usted como humano no debería tiene problemas para eliminar el exceso de caracteres, si aparecen, es decir, Chrome e IE no lo muestran, y Opera lo muestra como □). Como probablemente habrá notado, también agrega otro byte a la cadena que se está codificando, por lo que la representación codificada en Base64 no viene con el típico relleno de 4 bytes = típico de las cadenas codificadas en Base64 ( ../../../etc/passwd.png se codificaría para Li4vLi4vLi4vZXRjL3Bhc3N3ZC5wbmc= ) que adicionalmente ayudaría a identificar el esquema de codificación utilizado.

Supongo que se te proporcionó dicha URL codificada para evitar que un posible malware la descodifique (como una forma bastante simple de una prueba de Turing ), o su amigo simplemente usó alguna herramienta de codificación Base64 que vino con esta capacidad y la habilitó sin ninguna intención en particular (o tal vez pensó que la salida se ve mejor de esa manera, sin el relleno de 4 bytes). En cualquier caso, tendrás que preguntárselo a tu amigo, si quieres llegar al fondo. Existen posibles usos para tal ofuscación, pero no puedo responder que su amigo tenía exactamente esto en mente cuando lo usaba.

    
respondido por el TildalWave 09.08.2014 - 02:05
fuente
3

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.

    
respondido por el SilverlightFox 09.08.2014 - 15:26
fuente

Lea otras preguntas en las etiquetas