RSS feed
<< OWASP-TR Web Güvenliği Günleri | Home | SQLi 103 Lab : UNION ile Veritabanı Yapısını Öğrenelim >>

SQLi 103 : INFORMATION_SCHEMA'daki Veritabanı Bilgileri

SQL Injection 103

  1. Giriş
  2. INFORMATION_SCHEMA Nedir?
  3. Ne Yapacağız?
  4. Uğurlama

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ı :

 

The INFORMATION_SCHEMA.SCHEMATA --> Veritabanları tutan tablo
The INFORMATION_SCHEMA.TABLES     --> Tabloları tutan tablo
The INFORMATION_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

Yapacağımız, sizin de anladığınız üzere geçen LAB uygulamasında yaptığımızdan farkı 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.




Add a comment Send a TrackBack