¡Hola a todos! Aquí estamos de nuevo y esta vez seguimos preparando la certificación Burp Suite Certified Professional (BSCP), que proporciona una base muy buena de cara a auditorías web y gestión de la presión, sobre todo en el examen para el cual te proporcionan 4 horas y hay que explotar hasta 6 vulnerabilidades. Además, se trata de un examen muy barato (<100€) lo que la hace sumamente atractiva.
Antes de nada, recordad que PortSwigger nos permite probar 30 días su versión profesional de Burp Suite. Os recomendamos que activéis esta versión para poder probar todas las funcionalidades de la herramienta.
En esta entrada explicaremos y solucionaremos todos los laboratorios relativos a file path traversal. Hay muchos walkthroughs sobre cómo resolver estos laboratorios, pero exponerlos aquí nos sirve para afianzar conceptos y enseñaros además algunos trucos de uso de Burp Suite Professional, así como comentar veces que hemos visto las vulnerabilidades estudiadas en los laboratorios en la vida real. Sin más dilación, ¡comenzamos!
Como nota inicial, estas vulnerabilidades son quizá menos prevalentes en las webs que en mi experiencia profesional he analizado. Esto depende mucho del tipo de cliente y webs que se analicen, obviamente, porque muchas de ellas no requieren interactuar con archivos. No obstante, sí que me encontré varias veces path traversal en producción e incluso en alguno de ellos pudimos transformarlo o post-explotarlo para obtener un impacto mayor.
Lab1 (Apprentice) – File path traversal, simple case
Lo primero de todo, lanzamos el laboratorio y configuramos en la pestaña «Scope» para que solamente se capturen peticiones a dicha web, ya que es la que tenemos bajo alcance. Esto es muy recomendable siempre en auditorías reales, pues se eliminará todo el ruido del navegador y nos centraremos solo en lo realmente importante: el alcance de la auditoría.
En segundo lugar, tomemos como referencia el objetivo que nos proponen: «To solve the lab, retrieve the contents of the /etc/passwd
file.». En este laboratorio, lo que tenemos que hacer es identificar una vulnerabilidad de path traversal y explotarla, obteniendo el contenido de /etc/passwd.
Lo primero de todo que tenemos que tener en cuenta cuando intentamos buscar vulnerabilidades de path traversal es que este tipo de fallos de seguridad aparecen cuando se hacen lecturas de archivos a nivel de backend. Por tanto, tratar de identificar dónde la aplicación puede estar cogiendo nuestro input para generar un acceso a un fichero a nivel de sistema es fundamental.
En este caso, vemos cómo para cargar cualquier imagen se envía una petición al endpoint «/image» con el parámetro «filename». Este tipo de nombres es normalmente indicativo de potenciales path traversal. Asimismo, un escaneo automático de Burp Suite Professional revelaría la vulnerabilidad de manera muy rápida.

En este caso, la explotación es muy sencilla, dado que al no haber defensas simplemente podemos escalar directorios de manera arbitraria y leer /etc/passwd con un payload como el que sigue:
../../../../../../etc/passwd

Simplemente lanzando la petición anterior resuelve el propio laboratorio.
Lab2 (Practicioner) – File path traversal, traversal sequences blocked with absolute path bypass
Lo primero de todo, lanzamos el laboratorio y configuramos en la pestaña «Scope» para que solamente se capturen peticiones a dicha web, ya que es la que tenemos bajo alcance. Esto es muy recomendable siempre en auditorías reales, pues se eliminará todo el ruido del navegador y nos centraremos solo en lo realmente importante: el alcance de la auditoría.
En segundo lugar, tomemos como referencia el objetivo que nos proponen: «To solve the lab, retrieve the contents of the /etc/passwd
file.». En este laboratorio, lo que tenemos que hacer es identificar una vulnerabilidad de path traversal y explotarla, obteniendo el contenido de /etc/passwd.
En este caso, vemos cómo para cargar cualquier imagen se envía una petición al endpoint «/image» con el parámetro «filename», al igual que en el laboratorio 1 (echa un vistazo a ese laboratorio si quieres identificar la petición). Para explotarlo, nos encontramos que la típica secuencia «../» o «..\» se encuentra bloqueada. Sin embargo, es posible usar rutas completas para obtener el archivo deseado. Es decir, los payloads siguientes:
../../../../../etc/passwd => ERROR GRACIAS A LAS DEFENSAS
/etc/passwd => FUNCIONAL


Como vemos, lanzando el payload adecuado el laboratorio es resuelto.
Lab3 (Practicioner) – File path traversal, traversal sequences stripped non-recursively
Lo primero de todo, lanzamos el laboratorio y configuramos en la pestaña «Scope» para que solamente se capturen peticiones a dicha web, ya que es la que tenemos bajo alcance. Esto es muy recomendable siempre en auditorías reales, pues se eliminará todo el ruido del navegador y nos centraremos solo en lo realmente importante: el alcance de la auditoría.
En segundo lugar, tomemos como referencia el objetivo que nos proponen: «To solve the lab, retrieve the contents of the /etc/passwd
file.». En este laboratorio, lo que tenemos que hacer es identificar una vulnerabilidad de path traversal y explotarla, obteniendo el contenido de /etc/passwd.
En este caso, vemos cómo para cargar cualquier imagen se envía una petición al endpoint «/image» con el parámetro «filename», al igual que en el laboratorio 1 (echa un vistazo a ese laboratorio si quieres identificar la petición). Para explotarlo, sin embargo, tenemos un caso de defensa típico de muchos desarrolladores, que consiste en quitar apariciones de «../» pero de forma no recursiva. Sin embargo, esto debe hacerse de forma recursiva en el parámetro indicado por el usuario, ya que si no ocurre lo que vemos en el siguiente recuadro:
../../../../../etc/passwd => Convertido a /etc/passwd => Si la aplicación construye a partir de ruta de imágenes quedaría /path/a/ruta/imagenes/etc/passwd y por tanto no obtenemos el fichero
....//....//....//....//....//etc/passwd => Convertido a ../../../../../etc/passwd al eliminar solamente apariciones de "../" de forma no recursiva


Una vez más, el payload adecuado resuelve el laboratorio.
Lab4 (Practicioner) – File path traversal, traversal sequences stripped with superfluous URL-decode
Lo primero de todo, lanzamos el laboratorio y configuramos en la pestaña «Scope» para que solamente se capturen peticiones a dicha web, ya que es la que tenemos bajo alcance. Esto es muy recomendable siempre en auditorías reales, pues se eliminará todo el ruido del navegador y nos centraremos solo en lo realmente importante: el alcance de la auditoría.
En segundo lugar, tomemos como referencia el objetivo que nos proponen: «To solve the lab, retrieve the contents of the /etc/passwd
file.». En este laboratorio, lo que tenemos que hacer es identificar una vulnerabilidad de path traversal y explotarla, obteniendo el contenido de /etc/passwd.
En este caso, vemos cómo para cargar cualquier imagen se envía una petición al endpoint «/image» con el parámetro «filename», al igual que en el laboratorio 1 (echa un vistazo a ese laboratorio si quieres identificar la petición). Para explotarlo, sin embargo, tenemos defensas más avanzadas, a juzgar porque ninguno de los payloads anteriores no funcionan. Sin embargo, algo que suele funcionar muy bien a la hora de identificar path traversal es hacer fuzzing. Fíjate en la siguiente captura de Hackvertor (extensión ya comentada y que es muy útil) para que veas cómo la usamos para generar payloads codificados (URL-encode) y doblemente codificados (URL-encode de string URL-encoded).

Se pueden usar otras extensiones de Burp Suite Professional o incluso su pestaña Intruder, que traer algunos payloads de serie. No obstante, vemos cómo con fuzzing y un poco de codificación… ¡¡Resolvemos el laboratorio tal como sigue!!

Lab5 (Practicioner) – File path traversal, validation of start of path
Lo primero de todo, lanzamos el laboratorio y configuramos en la pestaña «Scope» para que solamente se capturen peticiones a dicha web, ya que es la que tenemos bajo alcance. Esto es muy recomendable siempre en auditorías reales, pues se eliminará todo el ruido del navegador y nos centraremos solo en lo realmente importante: el alcance de la auditoría.
En segundo lugar, tomemos como referencia el objetivo que nos proponen: «To solve the lab, retrieve the contents of the /etc/passwd
file.». En este laboratorio, lo que tenemos que hacer es identificar una vulnerabilidad de path traversal y explotarla, obteniendo el contenido de /etc/passwd.
En este caso, vemos cómo para cargar cualquier imagen se envía una petición al endpoint «/image» con el parámetro «filename», al igual que en el laboratorio 1 (echa un vistazo a ese laboratorio si quieres identificar la petición). Para explotarlo, sin embargo, tenemos una nueva defensa basada en comprobar que el archivo comienza con una ruta determinada. Sin embargo, esto es algo que se puede bypassear muy fácil tal como se ve en el siguiente ejemplo.
../../../../../etc/passwd => PAYLOAD INVÁLIDO, NO CUMPLE RUTA
/var/www/images/* => PAYLOAD VÁLIDO INCLUYENDO LO QUE SEA POR *
/var/www/images/../../../etc/passwd => PAYLOAD PERFECTAMENTE VÁLIDO

Payload adecuado y… ¡¡Otro lab resuelto!!
Lab6 (Practicioner) – File path traversal, validation of file extension with null byte bypass
Lo primero de todo, lanzamos el laboratorio y configuramos en la pestaña «Scope» para que solamente se capturen peticiones a dicha web, ya que es la que tenemos bajo alcance. Esto es muy recomendable siempre en auditorías reales, pues se eliminará todo el ruido del navegador y nos centraremos solo en lo realmente importante: el alcance de la auditoría.
En segundo lugar, tomemos como referencia el objetivo que nos proponen: «To solve the lab, retrieve the contents of the /etc/passwd
file.». En este laboratorio, lo que tenemos que hacer es identificar una vulnerabilidad de path traversal y explotarla, obteniendo el contenido de /etc/passwd.
En este caso, vemos cómo para cargar cualquier imagen se envía una petición al endpoint «/image» con el parámetro «filename», al igual que en el laboratorio 1 (echa un vistazo a ese laboratorio si quieres identificar la petición). Para explotarlo, sin embargo, tenemos una nueva defensa basada en comprobar la extensión del archivo. Sin embargo, un bypass típico para el checking de extensiones es el uso de NULL BYTE (algo usado también para subida de ficheros). Podemos usar el siguiente payload, donde el código del backend tomará toda la ruta y por tanto creerá que es un «jpg», mientras que posteriormente al interpretarse el NULL BYTE hace efecto y se elimina esa parte del payload para obtener el fichero del sistema:
../../../../../etc/passwd%00.jpg

Este es el último laboratorio de esta sección.
Como nota final, hay que resaltar que el path traversal es algo que las herramientas automáticas suelen detectar de manera rápida y eficiente. Hay que tener en cuenta que todos los sistemas operativos tienen archivos por defecto en rutas conocidas (/etc/passwd, C:\Windows\win.ini…) que pueden ser enumerados. Además, la inclusión de payloads y bypasses es muy automatizable (payloads planos, rutas completas, rutas relativas, codificación…). No obstante, siempre se recomienda revisar a mano todas las aplicaciones en busca de path traversal porque puede ser muy jugoso…
~km0xu95