DebugZero
Description du challenge
Someone on the dev team fat fingered their keyboard, and deployed the wrong app to production. Try and find what went wrong. The flag is in a file called “flag.txt”
Hint #1
Are there any python servers that can store water ;)
Analyse de la description
Le challenge nous donne un indice sur le type de serveur utilisé : python, nous pouvons également déduire que le serveur utilise le framework flask.
Analyse du site web
Lorsque nous lançons le site web, nous arrivons sur la page suivante :
La page dans l’état actuel ne nous donne aucun indice, j’ai donc analysé le code source pour voir s’il n’y avait pas des commentaires ou des informations cachées.
|
Nous pouvons voir qu’il y’a effectivement un indice caché, merci john 👀
<!-- John, please don't run the app in debug mode, how many times do I have to tell you this! --> |
Nous pouvons donc en déduire que le serveur est en mode debug, ce qui est une très mauvaise pratique en production.
Recherche d’exploit
Après quelques recherches, je suis tombé sur un article qui explique comment exploiter un serveur flask en mode debug: https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/werkzeug. La ressource en elle même ne m’a pas été très utile, mais elle m’a permis de trouver la route vers la console de debug : /console
Exploit
Code PIN
Lorsque nous arrivons sur la page, nous avons un code pin à rentrer :
J’ai d’abord essayer des combinaisons classiques (0000, 1234 etc….) mais aucune ne fonctionnait. J’ai donc fait un retour en arrière pour voir si je n’avais pas loupé un indice.
Je suis retourné sur le code source de la page principale, et au départ rien ne m’interpellait, mais en regardant de plus près, j’ai remarqué que les sources provenaient toutes d’un cdn sauf une :
<link rel="stylesheet" href="static/styles.css" /> |
j’ai donc décidé d’aller voir ce fichier 👀
/* Nothing interesting here except this number - 934123 */ |
Effectivement la page contenait le code pin : 934123
Console de debug
Maintenant que nous avons le code pin, nous pouvons accéder à la console de debug.
Il s’agit d’une console python, nous pouvons donc exécuter du code python. Chacun peut avoir une approche différente, mais j’ai décidé de lister le contenu de répertoire courant pour voir si je pouvais trouver le flag.
import os |
Nous pouvons voir flag.txt, nous allons donc l’afficher pour voir son contenu.
with open('flag.txt', 'r') as f: |
Nous avons le flag : dsc{p1zz4_15_4w350m3}