File path traversal, simple case

Imagine una aplicación de compras que muestra imágenes de artículos en venta. Esta podría cargar una imagen con el siguiente HTML:

<img src="/loadImage?filename=218.png">

La loadImage URL toma un filenameparámetro y devuelve el contenido del archivo especificado. Los archivos de imagen se almacenan en el disco en la ubicación /var/www/images/. Para devolver una imagen, la aplicación añade el nombre del archivo solicitado a este directorio base y utiliza una API del sistema de archivos para leer el contenido del archivo. En otras palabras, la aplicación lee desde la siguiente ruta de archivo:

/var/www/images/218.png

Esta aplicación no implementa defensas contra ataques de cruce de ruta. Por lo tanto, un atacante puede solicitar la siguiente URL para recuperar el /etc/passwdarchivo del sistema de archivos del servidor:

https://insecure-website.com/loadImage?filename=../../../etc/passwd

Esto hace que la aplicación lea desde la siguiente ruta de archivo:

/var/www/images/../../../etc/passwd

La secuencia ../ es válida dentro de una ruta de archivo y significa ascender un nivel en la estructura de directorios. Las tres ../secuencias consecutivas ascienden desde /var/www/images/ la raíz del sistema de archivos, por lo que el archivo que se lee es:

/etc/passwd

En los sistemas operativos basados en Unix, este es un archivo estándar que contiene detalles de los usuarios registrados en el servidor, pero un atacante podría recuperar otros archivos arbitrarios utilizando la misma técnica.

En Windows, tanto ../ y ..\ son secuencias válidas de recorrido de directorio. El siguiente es un ejemplo de un ataque equivalente contra un servidor Windows:

https://insecure-website.com/loadImage?filename=..\..\..\windows\win.ini

LAB

20250727211519.png

Al iniciar el laboratorio encontraremos con un sitio web que contiene ciertas imagenes

20250727213007.png

Estas imágenes están siendo llamadas con el parámetro filename

20250727213041.png

Inyectado un path traversal nos encontremos que la imagen no se puede mostrar debido a un error

20250727213114.png

Viendo en el historial de burpsuite, observaremos que podemos ver efectivamente el contenido del archivo /etc/passwd

20250727213138.png

Last updated