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/passwdesto 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/passwdPath 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/passwdsi la web detecta esto, eliminara el cruzado de directorios, pero como no es de forma recursiva podemos hacer esto:
ejemplo.com/?file=....//....//....//....//etc/passwdal 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/passwdy 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/passwdel 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/passwdahora, se volverá a decodificar la sentencia automáticamente obviamente, pero ahora quedaría así:
..%2F..%2F..%2F..%2Fetc/passwdpor 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.pngverificando 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/passwdLast updated