En este ejercicio, afrontaremos una variante un poco más difícil del ataque de credential-stuffing llevado a cabo antes. Sin embargo, esta vez se han implementado nuevas medidas para hacer la fuerza bruta más complicada.
Capturar la Petición
Empezaremos capturando la petición de http://10.10.101.156/admin/login/ y la revisaremos. Aquí un ejemplo:
HTTP/1.1 200 OK Server: nginx/1.18.0 (Ubuntu) Date: Fri, 20 Aug 2021 22:31:16 GMT Content-Type: text/html; charset=utf-8 Connection: close Set-Cookie: session=eyJ0b2tlbklEIjoiMzUyNTQ5ZjgxZDRhOTM5YjVlMTNlMjIzNmI0ZDlkOGEifQ.YSA-mQ.ZaKKsUnNsIb47sjlyux_LN8Qst0; HttpOnly; Path=/ Vary: Cookie Front-End-Https: on Content-Length: 3922 --- <form method="POST"> <div class="form-floating mb-3"> <input class="form-control" type="text" name=username placeholder="Username" required> <label for="username">Username</label> </div> <div class="form-floating mb-3"> <input class="form-control" type="password" name=password placeholder="Password" required> <label for="password">Password</label> </div> <input type="hidden" name="loginToken" value="84c6358bbf1bd8000b6b63ab1bd77c5e"> <div class="d-grid"><button class="btn btn-warning btn-lg" type="submit">Login!</button></div> </form>
En esta respuesta podemos notar que junto a los campos de nombre de usuario y contraseña, hay ahora un set de cookies, un CSRF (Cross-Site Request Forgery) token en forma de campo oculto. Recargar la página revela que la cookie de sesión y el loginToken cambian en cada petición. Esto significa que por cada intento de login, necesitamos extraer valores válidos de la cookie de sesión y el loginToken, reemplazándolos en cada petición de ataque.
Challenge
- Vamos a la página dada.

- Activamos la intercepción y nos logueamos con test test, por ejemplo. Mandamos la petición al Intruder.

- Configuramos Pitchfork attack, limpiamos las posiciones asignadas y seleccionamos username y password.

- En los payloads sets cargamos las mismas listas que usamos para el otro ataque.

- Como no podemos usar grep para seleccionar la cookie cambiante debido a la redirección, necesitaremos configurar una macro. Las macros nos permiten realizar la misma acción repetidamente. En este caso sólo queremos mandar una petición
GETa/admin/login/. Para hacerlo:- Volvemos a la pestaña Settings.

- Hacemos click en la categoría "Sessions", vamos hasta abajo y seleccionamos "Macros" y le damos a "Add".

- El menú que aparece nos mostrará nuestro historial de peticiones. Con la petición seleccionada haz click en OK.

- Finalmente dale a la macro un nombre acorde.

- Volvemos a la pestaña Settings.
- Ahora que tenemos una macro definida, necesitamos configurar las reglas de manejo de sesiones que definen cómo deberíamos usar la macro.
- En la categoría de "Sessions" de los ajustes principales ve arriba hasta "Session Handling Rules" y dale a "Add".

- Saltará una nueva ventana con dos pestañas: "Details" y "Scope". Rellena una descripción adecuada y cambia a la pestaña "Scope".

- Desmarca todas las opciones menos "Intruder" ya que no necesitamos que esta macro se aplique en ningún otro sitio.

- En la sección "URL Scope", selecciona "Use suite scope". Esto selecciona la macro para que sólo opere en sitios que hayan sido añadidos al scope global. Si no has seleccionado un scope global selecciona "Use custom scope" y añade
http://10.10.101.156/al scope en esta sección.

- En la categoría de "Sessions" de los ajustes principales ve arriba hasta "Session Handling Rules" y dale a "Add".
- Ahora debemos volver a la pestaña "Details" y seleccionar "Rule Actions". Le damos a "Add", seleccionamos "Run a Macro" de esta lista y selecciona la macro que creamos antes.

- Ahora, la macro meterá las cookies directamente en nuestras peticiones. Sin embargo, debemos restringir qué parámetros van a ser actualizados entre peticiones.
- Seleccionamos "Update only the following parameters and headers" y le damos a "Edit".
- Escribimos "loginToken" en el campo "Enter a new item".
- Seleccionamos "Update only the following cookies" y le damos a "Edit".
- Escribimos "session" en el campo "Enter a new item".

- Le damos a OK y estamos listos. Comenzamos el ataque.

- Ahora tenemos una macro definida que sustituye en cada petición la cookie de "session" y "loginToken" por una válida que obtiene de realizar una petición
GETa login. - Como ya nos pasó en el último ataque, todas las respuestas son 302 (redirección) por lo que debemos ordenarlas por longitud de respuesta.

- Con las credenciales obtenidas nos logueamos:

