Full Path Disclosure [FPD]

Saludos a todos,


Hace ya tiempo que no hago mención a alguna vulnerabilidad de esas que consideramos de Regional Preferente... me refiero a esas que medio mundo desprecia, y el otro medio cuando algún colgado (como el servidor aquí presente) explica dicen aquello de... AHH ¿Pero esto es una vulnerabilidad?. Y como no podría ser de otra forma, el Full Path Disclosure, es una entra en esta categoría... ¡tan innecesarias y útiles a la vez!


De su propio nombre podemos imaginarnos con una probabilidad de éxito cerca al 0'87 (eliminamos a aquellos que ni jota de inglés x'D) qué es lo que hace esta vulnerabilidad. Si eres de esa pequeña franja que no se lo imagin... Se trata de poder ver las rutas reales del servidor. Si ves una web cualquiera, al estilo de www.ejemplo.mil/Prueba/Concepto/Index.php, y pecasemos de ingenuidad, podrías llegar a pensar que Index.php se encuentra en /home/Prueba/Concepto/Index.php, pero te aseguro que así no es. Lo más normal es que fuera /home/Victor/html_docs/Prueba/Concepto/Index.php, /home/Victor/html_public/web/Prueba/Concepto/Index.php, etc...


Entonces el FPD consiste en que tras introducir valores malformados podamos obtener errores de los cuales extraer la ruta. Esto te va sonando más, ¿Verdad? Son los clásicos errores de:

Warning: main(/include/lang/es.php): failed to open stream: No such file or directory in /home/PoC/include/global.php on line 18

Warning: main(): Failed opening '/include/lang/es.php' for inclusion (include_path='.:/home/PoC/include') in /home/miarroba/include/global.php on line 18 t


En ese error encontramos el más clásico entre los clásicos errores que nos aparecen al tratar de explotar un LFI. Y es en este momento donde te das cuenta de para qué sirve estos errores... Como acabo de decir, en los LFIs es muy interesante para poder localizar el lugar donde se encuentran los ficheros que incluye (P.E.: $path = "/Includes/Juaker/".$_GET['file']; include($path);, ya sabes qeu si tu shell está en /Includes/Upload/, vas a necesitar aplicar un ../ para saltar a /Includes/). Otro ejemplo común puede ser para emplear sentencias de volcado de contenido de ficheros a través de SQLi, donde por ejemplo para emplear load_file() necesitaremos conocer el path exacto de donde se encuentra el fichero que le pasamos como parámetro.


Pero hasta ahora hemos estado hablando de forma muy abstracta, mucho bla bla y poco movimiento, así que procedo algunas formas de provocar un FPD. Por supuesto que la más clásica y mítica es introducir un fichero inexistente como parámetro a una función del script que trabaje con ficheros... como no encuentra el archivo, nos arrojará un error al estilo del que ya he mostrado.


En general esto de meter parámetros malformados o erróneos suele funcionar en bastantes ámbitos, por ejemplo, si hacemos un clásico SQLi a un sistema que corre Windows, lo más probable es que nos encontremos con un mensajito de error volcado por OLE DB en el cual encontraremos la ruta del script que obtuvo el error. Otro escenario, quizás menos habitual pero igualmente interesante, es la de provocar Null Sessions (o introducir caracteres extraños en una cookie) para que session_start() de un error (idea sacada de OWASP).

La última forma que se me ocurre ahora mismo es una que leí de Xianur0 en su paper sobre vulnerabilidades en SMF, y es la de usar un array vacío. Por ejemplo: /index.php=seth[]=SUCKS


Creo que las vulnerabilidades de Sensitive Information al estilo de esta están muy infravaloradas, ya que casi siempre (quizás soy el único ser humano al que le ocurre esto) son un recurso interesante y útil a la hora de una auditoría de seguridad en WebApps.

No hay comentarios:

Publicar un comentario