XUT_ / COURSES / PENETRATION TESTER

Extra-mile Challenge

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:

python
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

  1. Vamos a la página dada. Extra-mile Challenge
  2. Activamos la intercepción y nos logueamos con test test, por ejemplo. Mandamos la petición al Intruder. Extra-mile Challenge
  3. Configuramos Pitchfork attack, limpiamos las posiciones asignadas y seleccionamos username y password. Extra-mile Challenge
  4. En los payloads sets cargamos las mismas listas que usamos para el otro ataque. Extra-mile Challenge Extra-mile Challenge
  5. 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 GET a /admin/login/. Para hacerlo:
    1. Volvemos a la pestaña Settings. Extra-mile Challenge
    2. Hacemos click en la categoría "Sessions", vamos hasta abajo y seleccionamos "Macros" y le damos a "Add". Extra-mile Challenge
    3. El menú que aparece nos mostrará nuestro historial de peticiones. Con la petición seleccionada haz click en OK. Extra-mile Challenge
    4. Finalmente dale a la macro un nombre acorde. Extra-mile Challenge
  6. Ahora que tenemos una macro definida, necesitamos configurar las reglas de manejo de sesiones que definen cómo deberíamos usar la macro.
    1. En la categoría de "Sessions" de los ajustes principales ve arriba hasta "Session Handling Rules" y dale a "Add". Extra-mile Challenge
    2. Saltará una nueva ventana con dos pestañas: "Details" y "Scope". Rellena una descripción adecuada y cambia a la pestaña "Scope". Extra-mile Challenge
    3. Desmarca todas las opciones menos "Intruder" ya que no necesitamos que esta macro se aplique en ningún otro sitio. Extra-mile Challenge
    4. 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. Extra-mile Challenge Extra-mile Challenge
  7. 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. Extra-mile Challenge Extra-mile Challenge
  8. Ahora, la macro meterá las cookies directamente en nuestras peticiones. Sin embargo, debemos restringir qué parámetros van a ser actualizados entre peticiones.
    1. Seleccionamos "Update only the following parameters and headers" y le damos a "Edit".
    2. Escribimos "loginToken" en el campo "Enter a new item".
    3. Seleccionamos "Update only the following cookies" y le damos a "Edit".
    4. Escribimos "session" en el campo "Enter a new item". Extra-mile Challenge
  9. Le damos a OK y estamos listos. Comenzamos el ataque. Extra-mile Challenge
  10. 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 GET a login.
  11. Como ya nos pasó en el último ataque, todas las respuestas son 302 (redirección) por lo que debemos ordenarlas por longitud de respuesta. Extra-mile Challenge
  12. Con las credenciales obtenidas nos logueamos: Extra-mile Challenge