Seguridad web: Qué es y cómo explotar una falla Directory traversal

Directory Traversal

Hoy les venimos a mostrar cómo realizar un tipo de ataque llamado Directory traversal o recorrido de directorios, el cual existe hace tiempo, pero que aún así no es conocido por todas las personas y no es tan común cómo el SQLi.

Este artículo tiene una finalidad absolutamente educativa y se realiza con el fin de generar conciencia a todos aquellos que tienen bajo su responsabilidad la administración de un sitio web. Todo lo que aquí se muestra ha sido realizado en laboratorios propiedad de Security Hack Labs usando la aplicación Damn Vulnerable Web Application (DVWA), corriendo en un equipo con GNU/Linux Debian Stretch en una red LAN. En una próximo artículo les mostraremos cómo montar su propio laboratorio con DVWA para pruebas de seguridad web.

¿Qué es la vulnerabilidad Directory Traversal?

De acuerdo a Wikipedia:

Un directory traversal (o path traversal) consiste en explotar una vulnerabilidad informática que ocurre cuando no existe suficiente seguridad en cuanto a la validación de un usuario, permitiéndole acceder a cualquier tipo de directorio superior (padre) sin ningún control.

La finalidad de este ataque es ordenar a la aplicación a acceder a un archivo al que no debería poder acceder o no debería ser accesible. Este ataque se basa en la falta de seguridad en el código. El software está actuando exactamente como debe actuar y en este caso el atacante no está aprovechando un bug en el código.

Directory traversal también es conocido como el ../ ataque punto punto barra, escalado de directorios y backtracking.

Y básicamente eso es. Vamos a suponer que usted tiene tres carpetas en tres salones diferentes, una de ellas puede ser accedida por cualquier usuario presentando un carnet de identificación ante un sensor que automáticamente abre la puerta y que las otras dos solo deberían ser accedidas por usted. Por un error, usted se olvidó de limitar las otras dos carpetas a que solo usted pueda accederlas, la falla está ahí, pero los demás usuarios no saben y confían en que solo usted tiene acceso a esas otras dos carpetas. ¿Que pasaría si algún usuario curioso pasa su carnet por el sensor que abre las puertas de las carpetas "protegidas? Sencillamente la puerta se abre y el tiene acceso. Eso es lo que sucede con el Directory trasversal, se trata de una falla en el código que permite simular la ejecución de comandos propios del sistema mediante la URL para acceder a ficheros que solo deberían ser accedidos por el administrador del sistema.

¿Qué riesgos trae esta vulnerabilidad?

Al conocer cómo funciona, podemos fácilmente imaginarnos los riesgos, el cual se generaliza en el acceso a cualquier usuario a archivos protegidos dentro del sistema que pueden contener información muy sensible.

Escalando directorios.

Las vulnerabilidades de directory traversal se pueden encontrar al probar solicitudes HTTP, formularios y cookies, pero la forma más fácil de ver si una aplicación es vulnerable a este tipo de ataque es simplemente determinando si una URL usa una consulta GET. Una solicitud GET contiene los parámetros directamente en la URL y se vería así:

http://example.com/?file=index.php 

Se necesita un poco de conjeturas, pero a veces la información sensible puede exponerse subiendo por el directorio. El comando cd se usa para cambiar directorios , y cuando se usa con dos puntos ( cd .. ), cambia al directorio principal o a un directorio anterior al directorio actual.

Al agregar ../ directamente a la ruta del archivo en la URL, podemos intentar cambiar a directorios superiores en un esfuerzo por ver los archivos del sistema y la información que no se pretende que esté orientada a Internet. Podemos comenzar tratando de subir algunos niveles para acceder a /etc/passwd, pero podemos ver que esto no arroja resultados a imple vista:

FI

Ahora vamos a buscar unos niveles más arriba (añadir más ../ a la URL).

FI

Muy bien, ya hemos logrado acceder al archivo que queríamos. El archivo /etc/passwd contiene información acerca de los usuarios en el sistema, como nombres de usuario, identificadores, directorios de inicio e información de contraseñas (aunque esto normalmente se establece en x o *, ya que la información de contraseña real generalmente se almacena en otro lugar, /etc/passwd).

Otros archivos de interés incluyen el archivo /etc/group, que contiene información sobre los grupos a los que pertenecen los usuarios:

Fi

El archivo /etc/profile, que define umask y las variables predeterminadas para los usuarios:

FI

El archivo /etc/issue, que contiene información del sistema o un mensaje que se mostrará al iniciar sesión:

FI

 El archivo /proc/version, que enumera la versión del kernel de Linux en uso:

FI

 El archivo /proc/cpuinfo, que contiene información de CPU y procesador:

FI

El recorrido del directorio en otros sistemas operativos funciona de manera similar, pero hay ligeras diferencias involucradas. Por ejemplo, Windows usa el carácter de barra diagonal inversa como separador de directorios y el directorio raíz es una letra de unidad (a menudo C:\). Algunos archivos notables para buscar en Windows son:

  •     C:\Windows\repair\system
  •     C:\Windows\repair\SAM
  •     C:\Windows\win.ini
  •     C:\boot.ini
  •     C:\Windows\system32\config\AppEvent.Evt

Por supuesto, hay muchos más archivos que pueden arrojar cosas interesantes, por lo que si se alcanza el nivel de acceso al sistema, sería aconsejable dedicar algo de tiempo a buscar información confidencial.

Codificando cadenas y saltando restricciones de acceso a archivos

En ciertas situaciones, como cuando una aplicación web está filtrando caracteres especiales, la codificación se utiliza para eludir la validación de entrada para que un ataque sea exitoso. Hemos visto que esto se usa en otros ataques, como la inyección SQL , pero también se puede aplicar el mismo tipo de técnicas aquí al recorrido de directorios.

Los dos métodos principales de codificación que normalmente se usan son la codificación URL y la codificación Unicode. En sistemas Unix que normalmente utilizan barras diagonales, la codificación URL para la secuencia de caracteres ../ se vería como una de estas:

%2e%2e%2f
%2e%2e/
..%2f

Codificación unicode para la misma secuencia de carácteres:

..%c0%af

En sistemas Windows que generalmente usan barras diagonales inversas, la codificación URL para ..\ se vería así:

%2e%2e%5c
%2e%2e\
..%5c

Codificación unicode para la misma secuencia:

..%c1%9c

A menudo, una aplicación solo permitirá ver un determinado tipo de archivo, ya sea una página que finalice explícitamente en .php o un documento PDF. Podemos evitar esto agregando un byte nulo a la solicitud para terminar el nombre de archivo y eludir esta restricción, como sigue:

http://example.com/?file=archivosecreto.pdf%00 

Previniendo el Directory Trasversal

Mientras que el Directory trasversal o recorrido de directorio tiene el potencial de ser un ataque devastador para un administrador, afortunadamente es relativamente fácil protegerlo. Lo más importante que debe hacer es usar listas de control de acceso apropiadas y asegurarse de que se establezcan los privilegios adecuados para el archivo. Además, a menos que sea absolutamente necesario, evite almacenar cualquier información confidencial o archivos de configuración dentro de la raíz del documento web. Si no hay nada de importancia en el servidor para empezar, las repercusiones de un ataque se reducen en gran medida.

Al igual que la mayoría de las configuraciones orientadas a la web, otro paso importante a seguir es garantizar que se utiliza la validación de entrada correcta por parte del usuario. De hecho, si se puede evitar, es mejor omitir por completo la entrada del usuario cuando se trata de operaciones del sistema de archivos. La inclusión de buena entrada conocida como lista blanca también se puede utilizar como una medida adicional para minimizar el riesgo de que un atacante explote cualquier configuración incorrecta.

Otra cosa que se puede hacer (especialmente si un administrador quiere ir más allá del cumplimiento del deber) es realmente probar si su aplicación es vulnerable al recorrido del directorio. Es bastante fácil intentar estos procedimientos manualmente, pero existen herramientas que pueden automatizar fácilmente la mayoría de las pruebas como DirBuster, ZAP y DotDotPwn.

El recorrido del directorio permite que un atacante aproveche las configuraciones incorrectas de seguridad en un intento de ver o modificar información confidencial. Este es uno de los ataques más simples para realizar, pero los resultados pueden ser desastrosos, especialmente si se recopilan datos personales o financieros o si la información crítica sobre el servidor se ve comprometida y se utiliza como un punto de pivote. Como puede ver, en el mundo de la piratería la información es el rey.

Síguenos en FacebookTwitterunete a nuestra charla en Riotúnete a IRC o únete a Telegram y no olvides compartirnos en las redes sociales. También puede hacernos una donación o comprar nuestros servicios.

Acerca del autor

Especialista en Seguridad Informática bajo certificación OSCP, experto en técnicas de privacidad y seguridad en la red, desarrollador back-end, miembro de la FSF y Fundador de Security Hack Labs. Desarrollador de la distribución de hacking BlackArch Linux. Twitter: @edu4rdshl XMPP: [email protected]