Path Traversal - Portswigger
Path traversal es una vulnerabilidad donde un atacante manipula una ruta de archivo para salir del directorio permitido y acceder a archivos que no debería.
Lab: File path traversal, simple case
- Vamos a capturar la petición en la cual abramos una imagen cualquiera en otra ventana.
En path traversal, un atacante usa muchos ../ para salirse de la carpeta permitida y llegar a archivos sensibles.

- Abusamos de la falta de validación para escalar directorios utilizando secuencias ‘../‘.

Lab: File path traversal, traversal sequences blocked with absolute path bypass
-
Volvemos a capturar la petición en la cual abramos una imagen cualquiera en otra ventana.
-
Al modificar el parámetro filename e indicar directamente /etc/passwd, logramos leer el contenido del archivo, demostrando que el filtrado es insuficiente y que no hay validación sobre rutas absolutas.

Lab: File path traversal, traversal sequences stripped non-recursively
-
Volvemos a capturar la petición en la cual abramos una imagen cualquiera en otra ventana.
-
La aplicación intenta mitigar el path traversal eliminando las secuencias ‘../‘, pero lo hace de forma no recursiva. Esto permite evadir el filtro usando variantes como ‘….//‘, que tras la normalización del sistema de archivos siguen interpretándose como una subida de directorio. Usando ‘….//….//etc/passwd‘, logramos acceder a archivos sensibles como ‘/etc/passwd‘.
-
El filtro valida texto, el sistema operativo interpreta rutas,
//→ Linux lo interpreta igual que/).

Lab: File path traversal, traversal sequences stripped with superfluous URL-decode
La aplicación bloquea de forma directa las secuencias ../, sin embargo, comete el fallo de decodificar la entrada una vez adicional después del filtrado. Aprovechando este comportamiento, se utiliza ..%252f, que tras ser decodificado en dos ocasiones termina convirtiéndose en ../, lo que permite ejecutar un path traversal con éxito. Mediante esta técnica fue posible acceder al archivo /etc/passwd, demostrando cómo una decodificación extra puede dar lugar a vulnerabilidades críticas.
-
Volvemos a capturar la petición en la cual abramos una imagen cualquiera en otra ventana.
-
Vamos aplicar un URL-ENCODE a los / para que quede algo asi:
GET /image?filename=..%2f..%2f..%2f..%2f..%2f..%2f..%2fetc/passwd HTTP/2
- URL ENCODE a los %: (Una vez url decodea el % se queda con un %2f lo cual significa una / y asi hacemos un bypass y podemos apuntar directo al archivo).
GET /image?filename=..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc/passwd

Lab: File path traversal, validation of start of path
-
Volvemos a capturar la petición en la cual abramos una imagen cualquiera en otra ventana.
-
En este caso, la aplicación verifica únicamente que la ruta comience con /var/www/images/, pero no controla correctamente el contenido posterior. Esto permite enviar una ruta como /var/www/images/https://miguelonches/../etc/passwd, que al resolverse finalmente termina accediendo a un archivo sensible fuera del directorio autorizado. Este ejemplo muestra cómo una validación superficial del inicio del path puede ser fácilmente eludida mediante el uso de secuencias de retroceso (../).
GET /image?filename=/var/www/images/../../../../../../etc/passwd HTTP/2

Lab: File path traversal, validation of file extension with null byte bypass
-
Volvemos a capturar la petición en la cual abramos una imagen cualquiera en otra ventana.
-
La aplicación intenta garantizar que los archivos solicitados terminen en .png, pero no tiene en cuenta el uso del byte nulo (%00). Este carácter indica el final de una cadena para muchas funciones en lenguajes como C, por lo que al enviar una ruta como https://miguelonches/../etc/passwd%00.png, el servidor interpreta únicamente la parte anterior al %00 y accede al archivo /etc/passwd, aun cuando la validación de la extensión parece cumplirse.
