El cruce de directorios solo funciona con caracteres "% 00" con codificación URL al final

3

Encontré un sitio, usando acunetix, con un formulario POST que es posible ver archivos de texto sin formato, básicamente es una vulnerabilidad de cruce de directorios, pero lo curioso es que solo funciona cuando agrego un "% 00" en el final de la cadena de consulta, algo como esto:

name=../../../../../../../../windows/PFRO.log%00

¿Qué es? ¿Y por qué sucede y solo funciona de esta manera?

    
pregunta NBA YoungCode 10.05.2017 - 03:21
fuente

1 respuesta

4

%00 es la versión codificada en URL de un carácter de byte nulo. En algunas aplicaciones, puede inyectar un byte nulo para terminar prematuramente una cadena. Un atacante puede aprovechar esto para cortar el final de una cadena que no puede controlar.

Aquí está el pseudocódigo para ver cómo se ve el código afectado:

print(readfile("./" + $name + ".txt"))

En este ejemplo, cualquier valor proporcionado por el usuario para $name se agregaría automáticamente con una extensión .txt , lo que le impedirá elegir nombres de archivo arbitrarios. Para poder seguir suministrando su propia ruta, puede utilizar el byte 0x00 para terminar la cadena inmediatamente después de la carga útil.

Por lo tanto, estas rutas serían tratadas por igual por el sistema afectado:

./../../../../../../../../windows/PFRO.log
./../../../../../../../../windows/PFRO.log%00.txt

Los errores de inyección de bytes nulos son comunes porque muchos lenguajes de nivel superior se basan en C, donde se usa un byte nulo para indicar el final de una cadena. Por ejemplo, aquí hay un ejemplo de un script PHP vulnerable, tomado de los documentos PHP :

<?php
$file = $_GET['file']; // "../../etc/passwd
print(readfile("./" + $name + ".txt"))
" 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 } ?>

También vea: Incrustar código nulo en OWASP.

    
respondido por el Arminius 10.05.2017 - 03:28
fuente

Lea otras preguntas en las etiquetas