Solution de FrenchPhalange pour Scully 1

intro web

20 janvier 2025

🎯 Objectif

Notre développeur web n’est pas très doué en matière de sécurité… Saurez-vous afficher le flag afin que nous puissions lui montrer qu’il faut faire des efforts ?

Note : Aucun bruteforce n’est nécessaire.

Une variante de cette Ă©preuve est disponible ici : Scully 2.

🔍 Découverte

Le site web présente un formulaire de connexion simple avec :

  • Un champ username
  • Un champ password
  • Un bouton de connexion

L’inspection du code source rĂ©vèle un traitement classique des identifiants via une requĂŞte POST vers une API.

đź’‰ Exploitation

Première analyse

L’application utilise une validation cĂ´tĂ© serveur qui semble vulnĂ©rable aux injections SQL classiques.

Solution

  1. Dans le champ “Nom d’utilisateur” :
' OR 1=1 --
  1. Dans le champ “Mot de passe” :
fsdfdsdf

Cette injection fonctionne car :

  • Le ' ferme la chaĂ®ne de caractères dans la requĂŞte SQL
  • OR 1=1 ajoute une condition toujours vraie
  • -- commente le reste de la requĂŞte SQL

🎉 Flag

Flag obtenu après connexion réussie

đź“ť Notes

  • L’injection SQL de base ' OR 1=1 -- fonctionne directement, indiquant une absence totale de protection
  • Aucune validation des entrĂ©es n’est effectuĂ©e cĂ´tĂ© serveur
  • Pas besoin de techniques avancĂ©es ou de bruteforce

đź”’ Correction

Pour sécuriser ce type de vulnérabilité :

  • Utiliser des requĂŞtes prĂ©parĂ©es
  • Échapper les caractères spĂ©ciaux
  • Mettre en place une validation cĂ´tĂ© serveur
  • Utiliser un ORM pour la gestion des requĂŞtes SQL
  • ImplĂ©menter une limitation du nombre de tentatives de connexion