Road to HackMex: Dia 2 - Magical
Writeup: Magical - echoCTF
Información General
- Nombre de la Máquina: magical
- Plataforma: echoCTF
- Dificultad: Medio
- Sistema Operativo: Linux
- Fecha: 19 Jun 2025
- Autor: mrtaichi
Descripción de la máquina
Messing with one file to affect another, may sound like magic but its simply an inode away...
Enumeración
Escaneo Inicial
Escaneamos con Nmap y mientras tanto, nos conectamos directamente con el browser, a ver si de pura fé hay un servicio HTTP. Y en efecto, tenemos página en el puerto 80 usando Sitemagic CMS

Inmediatamente encontraremos un login arriba a la derecha, posiblemente con las contraseñas default activadas. (admin:admin)
Y de paso termina el nmap, que nos confirma SiteMagic y además lo siguiente:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u3 (protocol 2.0)
| ssh-hostkey:
| 3072 ad:fe:42:e6:3d:04:f3:60:02:c9:df:22:ee:39:12:0c (RSA)
|_ 256 f2:8e:0b:b4:40:c8:37:df:0d:42:d1:4d:4e:33:83:f7 (ED25519)
80/tcp open http Apache httpd 2.4.61 ((Debian))
|_http-title: Welcome - about us
|_http-generator: Sitemagic CMS
|_http-server-header: Apache/2.4.61 (Debian)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Análisis de Servicio
Como vimos previamente, el sitio utiliza Sitemagic CMS y, si lo intentamos, podremos observar que las credenciales de administrador están por default.
Creo que esto nos da suficiente material para un foothold inicial pero por si acaso corro un dirsearch a ver q sale
Y no nos dió nada útil el dirsearch
Explotación
Busqueda de vulnerabilidades
Mientras tanto, googleamos exploits para el CMS y el primer resultado es un Arbitrary File Upload que corre una página php sin problemas
https://www.exploit-db.com/exploits/48788
Esto se ve prometedor, antes de ahondar más podemos intentar subir de una vez nuestra revshell con este exploit
Intentos de explotaciones
Preparamos el payload en vista de que al parecer podemos subir cualquier php

Y observemos que, el exploit a grosso modo lo que hace es aprovechar que no hay sanitización en el file upload del CMS para poder justamente subir cualquier archivo. Si observamos la solicitud mostrada en exploit-db, nos daremos cuenta de que sube el archivo directamente, sin ningún mecanismo para evadir posibles sanitizaciones. Entonces, creo que ni siquiera es necesario replicar la solicitud mostrada en el exploit. Podemos intentar subir nuestro archivo directamente desde la funcionalidad ofrecida por el servicio

Y como podemos ver, al menos la subida del payload es funcional. Intentaremos subirlo bajo la carpeta files/images porque no pude hacerlo accesible directamente en files. Una vez hecho esto, nuestra payload estará accesible directamente bajo /files/images/payload.php
La payload que subí es un web shell interactivo, desde el cual de una vez podríamos sacar las banderas más obvias, como son la bandera bajo /etc/passwd y la bandera en printenv.

De todas formas, si no lo hacemos en este paso, esta web shell también funciona para levantar nuestra reverse shell con netcat. Hagámoslo de una vez para tener una shell bonita. Ya dije muchas veces la palabra shell.
Explotación
Ponemos a escuchar nuestro netcat y mandamos el comando para conectarnos desde la webshell que levantamos en el paso anterior. We're in.

Upgradeamos nuestra shell y corremos linpeas para ver q nos dice
Escalación de Privilegios
Análisis
Y algo que nos llama la atención inmediatamente del reporte es que nos dice que tenemos derecho a ejecutar el comando ls como sudo. Y no solo eso, si no que podemos modificar /bin/ls, que es justamente el comando que tambien podemos ejecutar como sudo

Explotación
Entonces, se nos ocurren ideas bastante sucias, pero la más trivial sería secuestrar ls para ejecutar un script propio. Y esto es justo lo que vamos a intentar.

Y efectivamente funcionó. Una vez hecho esto, vaciamos el resto de banderas faltantes. Que son:
- Una en /etc/shadow
- El nombre del archivo en /root (esta ya la podíamos sacar incluso con el puro ls con derechos de admin
Y listo. headshot
Nota final
Esta forma de escalar es la más trivial y obvia, que podríamos hacer con cualquier binario en el cual cumplamos las condiciones de:
- Poderlo ejecutar como root
- Poder modificarlo
Pero... si te interesa un reto, recordemos la descripción de la máquina.
Messing with one file to affect another, may sound like magic but its simply an inode away...
Recordemos que ls también nos permite ver el inode en el cual está almacenado un archivo, y a veces, varios archivos pueden estar almacenados en un mismo inode. En teoría, si encontráramos un archivo que podemos modificar el cual comparta inode con otro archivo que no podamos modificar pero que nos resulte interante modificar (/etc/shadow por ejemplo) podríamos utilizar enlaces simbólicos duros para modificar el archivo en el que no tenemos permisos, usando al archivo del que sí tenemos permisos. Si quieres una forma de escalar privilegios más interesante, que aproveche esto, te lo dejo de tarea (y que me avises cómo le hiciste jjjj)