Categories
OWASP PortSwigger Vulnerability

SQL Injection – Lab #6 SQL Injection Attack, Listing the Database Contents on Oracle

Oracle Veritabanlarında SQLi Saldırıları

Uygulamada bulunan zafiyet yardımı ile öncelikle kullanıcı adı ve parolalarının bulunduğu tabloya, daha sonra tablodaki sütunlara ve sütunlardaki bilgilere erişeceğiz. URL’deki category değişkeninden sonra tek tırnak ( ‘ ) atarak sunucu hatası alıyoruz ve SQLi olduğunu doğruluyoruz.

SQLi zafiyeti olduğunu gösteren ekran görüntüsü
Sütun sayısı 200 OK örnek ekran görüntüsü
Tablonun 2 sütundan oluştuğunu kanıtlayan hata ekran görüntüsü

Sütun sayısından sonra sütulardaki verinin türünü belirlemek için istekte bulunuyoruz ama sunucu hatası ile karşılaşıyor. Daha önce Oracle veritabanında kullandığımız yöntemi burada deniyoruz ve DUAL veritabanını çağırıyoruz. Bu tablo Oracle’da tüm kullanıcılar tarafından erişime açık olan bir tabloydu.

'+UNION+select+'bilisimcikiz1',+'bilisimcikiz2'-- // Hata aldığımız sorgu
'+UNION+select+'bilisimcikiz1',+'bilisimcikiz2'+from+dual-- // Çalışan sorgumuz.
Oracle DUAL tablo çağırma çalışan ekran görüntüsü

Bu aşamadan sonra yapmamız gereken veritabanında bulunan tabloları ekrana getirmek olacaktır. Yukarıdaki sorguda DUAL kullandığımız için veritabanının Oracle olduğunu biliyoruz bu nedenle daha önceki örneklerde olduğu gibi versiyon sorgusu yapmadan direkt tablo çekme sorgusuna geçebiliriz. SQL injection cheat sheet adresinden Oracle veritabanında tabloların hepsinin “SELECT * FROM all_tables” sorgusu ile çekilebildiğini öğrendik. Yıldız ( * ) yerine gelmesini istediğimiz sütun isimlerini yazmalyız ama ne yazacağımızı bilmiyoruz. Bu nedenle küçük bir araştırma yapıyoruz Oracle veritabanlarında sütun isimleri defaulda nasıl yazılır öğreniyoruz.

Örnek Google araştırma ekran görüntüsü

Sütunlarda tablolanın sahibi (OWNER) ve tablo ismi (TABLE_NAME) gibi sütunlar olduğunu öğreniyoruz. Zaten bize tablo ismi gerekliydi. Kullanıcıların olduğu tabloyu bulup daha sonra kullanıcı adı ve parolalara erişecektik. Sorgumuzu yazıyoruz. Bizim uygulamamızda 2 tane sütün olduğu için birine table_name direğine ise bilisimcikiz ya da NULL yazabiliriz.

'+UNION+select+table_name,+'bilisimcikiz2'+from+all_tables--
Kullanıcı bilgilerinin tutulduğu tablonun tespit edilme ekran görüntüsü

Tablo ismini bulduk. (USERS_MGQWPY) Şimdi bu tablonun sütunlarına ihtiyacımız var. Onun için ise “SELECT * FROM all_tab_columns WHERE table_name = ‘TABLE-NAME-HERE'”sorgusunu kullanacağız.

Örnek Google araştırma ekran görüntüsü

Tespit ettiğimiz tablodaki sütun isimlerini bilmiyoruz bu nedenle kısa bir araştırma ile nasıl yazıldığını öğreniyoruz. Daha sonra sorgumuzu yazıyoruz.

'+UNION+select+column_name,+'bilisimcikiz2'+from+all_tab_columns+WHERE+table_name+%3d+'USERS_MGQWPY'--
Kullanıcı adı parolaların bulunduğu sütunların tespit edildiği ekran görüntüsü
'+UNION+select+PASSWORD_LBIELG,+USERNAME_AMLAPI+from+USERS_MGQWPY--
Sütunlardaki kullanıcı adı ve parolaların ekrana basıldığı ekran görüntüsü
Lab tamamlama ekran görüntüsü

Leave a Reply

Your email address will not be published. Required fields are marked *