Union-based SQLi
Birleştirme tabanlı SQLi
Girdiyi manipüle ettik, peki nasıl veriyi alabiliriz? Yine SQL'de UNION komutundan yararlanabiliriz. UNION önceki ve sonraki tablo alanları sayısı aynı olmalı kuralından yola çıkılır:
Yukardaki SQL cümleciğinde Haberler tablosundaki alan sayısı ise LKD sonucunun alırız. Aksi durumda UNION hatasını alırız veya LKD 1,2,3,4,5 görmeyiz. Bu durumda farklı değerler için iterasyona devam edilir. Bu durumda bilmediğimiz tablonun kolon sayısını bulmuş oluruz. Kolondaki hangi alandan LKD title geldiğini ise yine deneme yanılma ile bulabiliriz. İstediğimiz fonksiyonu UNION yanında çalıştırabiliriz. Örneğin 3 yerine version() kullanabiliriz:
Yukardaki SQL cümleciği sonucu LKD 1, 2, 5.6.37, 4, 5 çıktısı görülebilir.
Yani veri tabanından dönen veriyi bir şekilde değiştirdik !
Bundan sonra sıra tablo bilgilerini almaya geldi sıra. Aşağıdaki SQL cümleciği ile MySQL/Maria sunucudan tablo adları çekilebilir:
Buradaki SQL cümleciğinde database() fonksiyonu çalışılan veri tabanını döndüren fonksiyon. İki iş yapmamak için bu fonksiyonu kullandık. Veri tabanı adını da bulup metin veri girdisi olarak da verebilirdik. Yukardaki SQL cümleciğinin örneğin çıktısı aşağıdaki gibi olabilirdi:
LKD articles makaleler kullanicilar
Aşağıdaki SQL cümlecikleri ile artık daha derinlere (alanlara/kolonlara) iniyoruz. Henüz hala tablo şemasını/yapısını bilmiyoruz. Gözümüze kestirdiğimiz kullanicilar tablosuna doğru iniyoruz:
Aşağıdaki gibi çıktı görülebilebilir:
LKD mehmet!:::LKD:::mehmet@mehmet.com
SELECT içinde hex türünde veri de girilebilir. Örneğin : işareti yerine 0x3a da girilebilirdi. Duruma göre hex kodlaması da kullanılabilir...
Bu SQL enjeksiyona UNION-Based SQL Injection denilir. Burada tablolara, tablolardan şemaya, şemadan da veri çekmeye geçtik.
SELECT ayrıca concat yerine XSS atağı da aşağıdaki gibi eklenebilirdi:
table_name'de tırnak kullanımı olmasaydı aşağıdaki gibi CHAR(101) fonk. da kullanılabilirdi.
ÖDEV: http://testphp.vulnweb.com/listproducts.php?cat=1 sayfasındaki SQL enjeksiyonunu tespit edin. İstenenler:
Zaafiyet tespiti
Kolon sayısı
DB veri tabanı adı
Tablo adları
Bir tablonun kolon verileri
Bu tablonun verileri
Last updated
Was this helpful?