Crossbow - Hackmyvm

0xH3rshel · December 23, 2023

Autor: Cromiphi
Dificultad: Medio

img

Reconocimiento

Comienzo realizando una enumeración de los puertos abiertos en la máquina.

$ sudo nmap -p- crossbow.hmv
Starting Nmap 7.94SVN ( https://nmap.org ) at 2023-12-23 11:00 CET
Nmap scan report for crossbow.hmv (192.168.1.27)
Host is up (0.00032s latency).
Not shown: 65532 closed tcp ports (reset)
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
9090/tcp open  zeus-admin

No hay que prestar mucha atención a “zeus-admin”, eso lo indica nmap porque no reconoce el servicio que se está ejecutando. Solo nos interesa que el puerto 9090 está abierto.

Puerto 80

En el puerto 80 encontramos un servidor http típico. Muestra información sobre Polo, sus hobbies y otros datos, pero lo relevante son los archivos JavaScript que podemos encontrar si abrimos el depurador del navegador.

img

Como se puede ver, hay dos archivos interesantes: app.js y config.js.

En el archivo config.js, encontramos una variable llamada HASH-API-KEY que podemos decodificar en este sitio web: Decode snefru

img

Guardamos el resultado y continuamos con la enumeración.

Puerto 9090

Continuando la enumeración en el puerto 9090, nos encontramos con un formulario de inicio de sesión para una máquina Debian.

img

Pruebo con el usuario Polo y la contraseña obtenida del hash, ¡y estamos dentro!

En la parte izquierda, hay acceso a una terminal con la que podemos ejecutar comandos como Polo.

Escalado de Privilegios

Esta parte es muy interesante, y voy a intentar explicarlo lo mejor posible.

Nota

  • Si ejecutamos linpeas.sh o realizamos una enumeración manual del servidor, nos damos cuenta de que estamos dentro de un contenedor Docker. Esto será muy importante más adelante.

SSH-Agent

Al listar los procesos en ejecución, vemos que el usuario lea tiene un “agent” en ejecución con el PID 1087.

img

SSH-Agent-Hijacking

Nuestro objetivo será realizar un SSH-Agent-Hijacking. En el siguiente enlace se muestran los conceptos teóricos del ataque: SSH-Agent-Hijacking, y en Hacktricks encontramos cómo explotarlo también: Hacktricks

Si continuamos con la enumeración, vemos que el agente se encuentra en el directorio “/tmp”, pero no podemos leerlo.

img

Generación SSH-Agent

Si creamos un nuevo agente como el usuario Polo, veremos que el agente generado en la carpeta dentro de /tmp tiene un valor muy similar al PID del proceso que lo ejecuta.

img

Por lo que, conociendo el PID del agente del usuario lea, podemos realizar fuerza bruta y adivinar el nombre de su archivo agente.

img

Mmmmmm… Esto no ha funcionado.

img

También podemos ver que existe otro usuario llamado Pedro. Ahora intentaré de nuevo con ese usuario y conectándome a la máquina real; recordemos que estamos dentro de un contenedor Docker.

Sustituyo el nombre de la máquina, en lugar de crossbow, paso a utilizar la dirección IP (NO LA DEL CONTENEDOR).

img

Mantengo pulsada la tecla ENTER mientras prueba con los distintos valores hasta encontrar el correcto.

img

¡Ha conseguido conectarse!

Root

Enumerando los puertos abiertos, vemos que hay uno solo accesible desde localhost.

img

Para poder acceder desde mi máquina Kali, realizo una redirección de puertos con socat.

img

Semaphore

Lo primero que encuentro es un formulario de inicio de sesión.

img

Esta parte no tiene dificultad, ya que probando credenciales rápidamente descubrimos que tanto el usuario como la contraseña son “admin”.

Para conseguir acceso como usuario root, lo primero que hago es crear el siguiente “playbook” en el directorio /tmp.

img

A continuación, hay que seguir los siguientes pasos:

  1. Añado un nuevo repositorio a Semaphore: /tmp img

  2. Creo un nuevo template, cuyo playbook sea el fichero shell.yml creado anteriormente. img

  3. Al ejecutarlo va a dar un error sobre “locales”. img

  4. Para corregirlo, edito “dummy variable” añadiendo configuración de idioma. img

  5. Ahora ya todo funciona. img

  6. ¡Root! img

Muchas gracias a Cromiphi por esta máquina.

Twitter, Facebook