SQLi 103 : INFORMATION_SCHEMA'daki Veritabanı Bilgileri
SQL Injection 103
GİRİŞ
Bu dersimizde, UNION ile karşımızdaki sistemin veritabanı bilgilerinin nasıl alınabileceği üzerine konuşacağız.
Öncelikli olarak, UNION'in ne olduğunu sanırım hepimiz bir önceki dersimizden hatırlıyoruz, birden çok SELECT statement'ından dönen resultset'leri birleştirmeye yarıyordu, LAB uygulamamızda UNION'in nasıl kullanıldığını detaylı olarak incelemiştik
Şimdi de yapacağımız ise aslında MySQL veritabanı sisteminin INFORMATION_SCHEMA isimli veritabanından bilgiler almak olacak.
INFORMATION_SCHEMA Nedir?
INFORMATION_SCHEMA MySQL'in barındırdığı diğer tüm veritabanları, tablolar ,tablo isimleri ve özellikleri gibi bir çok veriyi içerisinde tutan bir bilgi veritabanıdır.Bu read-only bir veritabanıdır ; içerisindeki verileri bu veritabanı üzerinden silemez ve değiştiremezsiniz.Şimdilik kullanacağımız veritabanları :
INFORMATION_SCHEMA.SCHEMATA --> Veritabanları tutan tabloINFORMATION_SCHEMA.TABLES --> Tabloları tutan tabloINFORMATION_SCHEMA.COLUMNS --> Sütunları tutan tablo
Örneğin, INFORMATION_SCHEMA.SCHEMATA tablosundan sistemdeki veritabanlarının isimlerini çekmek için :
mysql> SELECT schema_name
-> FROM information_schema.schemata
-> ORDER BY schema_name DESC;
+-----------------------+
| schema_name |
+-----------------------+
| test |
| sql_injection_lessons |
| phpmyadmin |
| mysql |
| information_schema |
| egg |
+-----------------------+
6 rows in set (0.00 sec)
MySQL Command Line Client'tan yaptığımız bu sorgu INFORMATION_SCHEMA.SCHEMATA tablosundan schema_name isimli sütunları çekip bu sütunları alfabetik sıranın tersi yönünde sıralar.
Aynı şekilde MySQL'deki SHOW ifadesi de verdiği bilgileri INFORMATION_SCHEMA tablosundan alır.Örneğin SHOW databases dediğinizde :
- mysql> show databases;
+-----------------------+
| Database |
+-----------------------+
| information_schema |
| egg |
| mysql |
| phpmyadmin |
| sql_injection_lessons |
| test |
+-----------------------+
6 rows in set (0.00 sec)
- Alacağınız çıktı yukarıdaki gibi olup; SELECT ile aldığımızdan tek farkı alfabetik olarak sıralı olmasıdır ki alfabetik olmamasını biz kendimiz istemiştik.
Ne Yapacağız
INFORMATION_SCHEMA yardımıyla veritabanı sunucusunda kayıtlı tüm veritabanlarının isimlerini alıp, işimize yarayanı kullanmak olacaktır.Özellikle black-box pen testing yaparken,karşı sistemdeki veritabanı isimlerini öğrenmek işinizi ciddi ölçüde kolaylaştırır, aksi takdirde hangi tablodan hangi sütunu çekmeniz gerektiğini bulmanız tamamen şansınıza kalırdı.
Uğurlama
INFORMATION_SCHEMA nın temel yapısını ve hangi tablosunda neyi sakladığını inceledikten sonra LAB bölümümüze geçebilirsiniz.