🕸️Enumeración de IDOR
Última actualización
Última actualización
Explotar las vulnerabilidades de IDOR es fácil en algunos casos, pero puede ser muy complicado en otros. Una vez que identificamos un IDOR potencial, podemos comenzar a probarlo con técnicas básicas para ver si expondría otros datos. En cuanto a los ataques IDOR avanzados, necesitamos comprender mejor cómo funciona la aplicación web, cómo calcula sus referencias de objetos y cómo funciona su sistema de control de acceso para poder realizar ataques avanzados que podrían no ser explotables con técnicas básicas.
Comencemos discutiendo varias técnicas para explotar vulnerabilidades de IDOR, desde la enumeración básica hasta la recopilación masiva de datos y la escalada de privilegios de usuario.
Comencemos con un ejemplo básico que muestra una vulnerabilidad típica de IDOR. El ejercicio siguiente es una aplicación web Employee Manager
que aloja registros de empleados:
Nuestra aplicación web asume que estamos conectados como empleados con ID de usuario uid=1
para simplificar las cosas. Esto requeriría que iniciemos sesión con credenciales en una aplicación web real, pero el resto del ataque sería el mismo. Una vez que hacemos clic en Documents
, se nos redirige a /documents.php
:
Cuando llegamos a la página Documents
, vemos varios documentos que pertenecen a nuestro usuario. Estos pueden ser archivos subidos por nuestro usuario o archivos que nos asigna otro departamento (por ejemplo, el Departamento de Recursos Humanos). Al revisar los enlaces de los archivos, vemos que tienen nombres individuales:
Vemos que los archivos tienen un patrón de nombres predecible, ya que los nombres de los archivos parecen utilizar el usuario uid
y el mes/año como parte del nombre del archivo, lo que puede permitirnos buscar archivos de otros usuarios. Este es el tipo más básico de vulnerabilidad de IDOR y se llama static file IDOR
. Sin embargo, para buscar archivos de otros usuarios con éxito, asumiríamos que todos comienzan con Invoice
o Report
, lo que puede revelar algunos archivos, pero no todos. Por lo tanto, busquemos una vulnerabilidad de IDOR más sólida.
Vemos que la página está configurando nuestro uid
con un parámetro GET
en la URL como ( documents.php?uid=1
). Si la aplicación web utiliza este parámetro uid
GET como una referencia directa a los registros de empleados que debe mostrar, es posible que podamos ver los documentos de otros empleados simplemente cambiando este valor. Si el extremo back-end de la aplicación web tiene un sistema de control de acceso adecuado, obtendremos algún tipo de Access Denied
. Sin embargo, dado que la aplicación web pasa como our uid
en texto sin formato como una referencia directa, esto puede indicar un diseño deficiente de la aplicación web, lo que lleva a un acceso arbitrario a los registros de los empleados.
Cuando intentamos cambiar a uid
, ?uid=2
no notamos ninguna diferencia en la salida de la página, ya que seguimos obteniendo la misma lista de documentos y podemos asumir que todavía devuelve nuestros propios documentos:
Sin embargo, debemos estar atentos a los detalles de la página durante cualquier pentest web y siempre teniendo en cuenta el código fuente y el tamaño de la página, si observamos los archivos vinculados, o si hacemos clic en ellos para visualizarlos, nos daremos cuenta de que se trata de archivos diferentes, que parecen ser los documentos pertenecientes al empleado con uid=2
:
Este es un error común que se encuentra en las aplicaciones web que sufren vulnerabilidades de IDOR, ya que colocan el parámetro que controla qué documentos de usuario mostrar bajo nuestro control mientras que no tienen un sistema de control de acceso en el back-end. Otro ejemplo es usar un parámetro de filtro para mostrar solo los documentos de un usuario específico (por ejemplo, uid_filter=1
), que también se puede manipular para mostrar los documentos de otros usuarios o incluso eliminar por completo para mostrar todos los documentos a la vez.
Podemos intentar acceder manualmente a los documentos de otros empleados con uid=3
, uid=4
, etc. Sin embargo, acceder manualmente a los archivos no es eficiente en un entorno de trabajo real con cientos o miles de empleados. Por lo tanto, podemos utilizar una herramienta como Burp Intruder
o ZAP Fuzzer
para recuperar todos los archivos o escribir un pequeño script bash para descargar todos los archivos, que es lo que haremos.
Abrimos con [ CTRL+SHIFT+C
] el inspector
y luego hacemos clic en cualquiera de los enlaces para ver su código fuente HTML y obtendremos lo siguiente:
Podemos elegir cualquier palabra única con grep
para poder acceder al enlace del archivo. En nuestro caso, vemos que cada enlace comienza con <li class='pure-tree_link'>
, por lo que podemos acceder con curl
a la página y grep
a esta línea de la siguiente manera:
Como podemos ver, pudimos capturar los enlaces de los documentos con éxito. Ahora podemos usar comandos bash específicos para recortar las partes adicionales y obtener solo los enlaces de los documentos en la salida. Sin embargo, es una mejor práctica usar un patrón Regex
que coincida con las cadenas entre /document
y .pdf
, que podemos usar con grep
para obtener solo los enlaces de los documentos, de la siguiente manera:
Ahora, podemos usar un bucle for
simple para recorrer el parámetro uid
y devolver el documento de todos los empleados, y luego usar wget
para descargar cada documento:
Cuando ejecutamos el script, se descargarán todos los documentos de todos los empleados con uids
entre 1 y 10, lo que permite explotar con éxito la vulnerabilidad IDOR para enumerar en masa los documentos de todos los empleados. Este script es un ejemplo de cómo podemos lograr el mismo objetivo. Intente utilizar una herramienta como Burp Intruder o ZAP Fuzzer, o escriba otro script de Bash o PowerShell para descargar todos los documentos.
Repita lo que aprendió en esta sección para obtener una lista de documentos de los primeros 20 uids
de usuarios en /documents.php
, uno de los cuales debe tener un archivo '.txt
' con la flag.
Vamos allá con la aplicación de Employee Manager. Como ya sabemos hay 2 directorios:
Documentos
Contratos
Como sabemos que hay muchos empleados vamos a hacer una enumeración masiva con un script en bash para automatizar esta tarea. Lo primero vamos a abrir el inspector para ver el html de los links, tanto de Invoice
como de Report
:
Tenemos el siguiente html, con lo que observamos que tanto los Invoice
como los Report
se almacenan en el directorio /documents
:
Vamos a usar el script de esta sección pero algo más vitaminado para iterar sobre los ids de los 20 empleados y extraer todos los documentos en nuestro directorio actual:
Ejecutamos el script con bash y nos empieza a descargar los archivos:
Si hacemos un ls
en el directorio actual encontramos el archivo de la flag: