Path Traversal

web hacking

El Path Traversal (también conocido como Directory Traversal, ataque de salto de directorio, etc.) es una vulnerabilidad de seguridad en aplicaciones web que permite a un atacante acceder a archivos y directorios en el sistema de archivos del servidor que no están destinados a ser accesibles por el usuario. Esto ocurre cuando la aplicación no valida o sanitiza correctamente la entrada del usuario que se utiliza en una ruta de archivo, permitiendo al atacante usar secuencias como ../ para "navegar" hacia arriba en el sistema de archivos y acceder a archivos sensibles fuera del directorio permitido.

Path traversal simple

el Path traversal simple se presenta cuando la aplicación carga mediante un parámetro de la URL (por ejemplo) archivos internos del servidor sin sanitización adecuada, lo que nos permite cruzar entre directorios mediante una secuencia como ../ que nos permite retroceder:

ejemplo.com/?file=image.png
			|
ejemplo.com/?file=../../../../etc/passwd

esto nos permite leer archivos como el /etc/passwd, debes recorrerte de preferencia los directorios exactos hasta llegar al archivo que deseas, en algunos servidores no importa si "retrocedes de mas" directorios, pero si retrocedes menos de donde se ubica un archivo no aparecerá.

Path traversal simple mediante rutas absolutas

como dice en el nombre, consiste en usar solo la ruta absoluta para intentar leer un archivo, esto funcionaria si el servidor interpreta la carga de archivos mediante las mismas rutas, y también puede servir para bypassear medidas de seguridad que detecten cruzado de directorios mediante ../ por ejemplo.

ejemplo.com/?file=image.png
			|
ejemplo.com/?file=/etc/passwd

Path traversal burlando la detección de secuencias de recorrido eliminadas de forma no recursiva

en este caso como dice el nombre esta vulnerabilidad ocurre cuando se intenta eliminar las sentencias de cruzado de directorios como ../, pero esto se hace de forma no recursiva lo que representa un peligro por lo siguiente:

ejemplo.com/?file=image.png
			|
ejemplo.com/?file=../../../../etc/passwd

si la web detecta esto, eliminara el cruzado de directorios, pero como no es de forma recursiva podemos hacer esto:

ejemplo.com/?file=....//....//....//....//etc/passwd

al multiplicar el payload ../ el servidor eliminara solo uno ya que hace la eliminación de forma no recursiva, por lo que nos quedamos al final con esto:

ejemplo.com/?file=../../../../etc/passwd

y el path traversal seria exitoso

Path Traversal mediante codificación (burlando el bloqueo de secuencias de recorrido)

En este caso, la aplicación bloquea directamente las secuencias de recorrido ../, pero esta detección puede ser burlada mediante la codificación URL de las barras:

..%2F..%2F..%2F..%2Fetc/passwd

el problema con esto es que al ser una codificación simple, es convertida automáticamente a su estado original y detectada denuevo, por lo que para hacer una doble codificación, codificando ahora cada porcentaje (%):

..%252F..%252F..%252F..%252Fetc/passwd

ahora, se volverá a decodificar la sentencia automáticamente obviamente, pero ahora quedaría así:

..%2F..%2F..%2F..%2Fetc/passwd

por lo que, el servidor no detectaría el patrón de las sentencias de recorrido y dejara pasar la solicitud, lo que nos permitirá leer el /etc/passwd en este caso.

Hay servidores que decodifican las sentencias varias veces, por lo que podemos seguir intentando codificando cada vez más, talvez con un script.

Path traversal burlando la validación en el inicio de la ruta

en este caso, el servidor carga archivos mediante rutas absolutas, por ejemplo al cargar una imagen:

image?filename=/var/www/images/test.png

verificando que cada solicitud contenga un PATH especifico, intentando bloquear peticiones maliciosas hacia rutas externas. pero al solo validar esto, ignora lo que este del otro lado, así que fácilmente podemos cruzar entre directorios:

image?filename=/var/www/images/../../../../etc/passwd

Last updated