Solution de yagamii#2077 pour Push it to the limit

intro web php

29 décembre 2023

Table des matières

Description

  • Auteur: DrStache
  • Difficulté : Intro

Exploitez une injection SQL afin de vous connecter sur l’application web.

Solution

J’ai commencé d’abord par essayer de m’authentifier avec (user: admin, password: 'or 1=1 --), le classique 😉 mais c’est sans succès ! Identifiants incorrects.

Cependant, j’ai remarqué que lorsque l’on soumet le formulaire et qu’on consulte la réponse renvoyée par le serveur, on trouve un commentaire HTML comprenant la requête SQL qui permet de vérifier l’authentification. (avec les identifiants envoyés). flag

-- commentaire HTML renvoyait dans la réponse du serveur: <!--
SELECT * FROM users WHERE username="admin" AND password="'or 1=1 --" 
-- >

Cela n’arrive pas souvent dans la vraie vie, mais ça va beaucoup nous aider à comprendre comment effectuer notre injection. Dans cette requête SQL c’est les doubles quotes qui sont utilisées. Commençant par remplacer notre quote par une double quote ! Donc 'or 1=1 -- par "or 1=1--.

flag

-- Requête exécutée:
SELECT * FROM users WHERE username="admin" AND password="" or 1=1 --" 

Cette fois le message est différent du précédent: “Erreur : trop de lignes sont retournées par la requête SQL.

En SQL on utilise LIMIT pour définir le nombre maximum de résultats que l’on souhaite obtenir. J’ajoute cette clause en limitant le résultat à 1: " or 1=1 LIMIT 1-- et je m’authentifie en tant qu’admin pour récupérer le FLAG 😎

flag

-- Requête exécutée:
SELECT * FROM users WHERE username="admin" AND password="" or 1=1 LIMIT 1 --