Road to HackMex: Dia 2 - Magical

· 5min · IsaacNietoG

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

Sitio

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

Nmap

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

Payload

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

Upload

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.

Web shell

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.

Revshell

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

a b

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.

root

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)