RSS feed
<< SQLi 103 : INFORMATION_SCHEMA'daki Veritabanı Bilgileri | Home | MadWifi Driverlar ve DoS! >>

SQLi 103 Lab : UNION ile Veritabanı Yapısını Öğrenelim

SQL Injection 103

  • Araç-Gereç
  • Kullanım Talimatları
  • Uygulama Hakkında Bilgi
  • Zayıflık İncelemesi
  • INFORMATION_SCHEMA'dan İstediğimiz Bilgileri Alalım
  • Referanslar(Lab & Teori)

    Araç-Gereç

  • Kodlar
  • Apache Web Server Version 2.2.4
  • PHP Script Language Version 5.2.3
  • MySQL Database Version 5.0.45
  • phpMyAdmin Database Manager Version 2.10.2

    Kullanım Talimatları

    1. Kodları download edin.
    2. Arşivi açın (member.php, config.php, database.sql)
    3. config.php'deki veritabanı, kullanıcı adı, parola ayarlarını yapın.
    4. db.sql'i veritabanı sunucunuza import edin
    5. member .php'yi web sunucunuzdan çağırın

    Uygulama Hakkında Bilgi

    Kullanacağımız uygulama, SQL Injection 102 Lab : UNION İle Tablolardan Veri Okuyalım! LABinin uygulaması ile aynı uygulama.Çok tembel bir insan olduğumdan yeni bir uygulama yazmadım.

    Ama o LAB'i okumamış olanlar için söyleyeyim, kullanacağımız asıl olarak member.php,bir adet textbox ve butondan oluşan, girilen id'li kullanıcının adını ve mail adresini döndüren şirin ve ufak bir web uygulamasıdır.

    Zayıflık İncelemesi

    Yine zayıflık incelemesini de bir önceki LAB'ımızda yapmıştık:

    Kodun,veritabanından ID parametresine göre bilgileri çektiği kısım :

    $id=$_POST["id"];
    $sql="SELECT username,email FROM users WHERE id = $id";

    Buradaki id parametresi, hiçbir filtreleme ya da benzer bir kontrolden geçmeksizin dinamik SQL sorgusunun içine katıldığı için,id parametresi ile birlikte gelecek olan kötü niyetli SQL kodlarının sorguyu manipule etmesine olanak vermektedir.

    INFORMATION_SCHEMA'dan İstediğimiz Bilgileri Alalım

    INFORMATION_SCHEMA veritabanında, sunucu üzerindeki diğer veritabanları hakkında bilgi alabileceğimiz 3 adet tablo vardır.Bunlar daha önce de söylediğimiz üzere :

  • The INFORMATION_SCHEMA SCHEMATA Table
  • The INFORMATION_SCHEMA TABLES Table
  • The INFORMATION_SCHEMA COLUMNS Table

    Aslında INFORMATION_SCHEMA'da daha farklı bilgiler de yer almakla birlikte, bizim için şu seviyede önemli olan veritabanı, tablo ve kolon adlarıdır.

    Öncelikli olarak, INFORMATON_SCHEMA.SCHEMATA tablosundan, veritabanlarını çekmek için:

    SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA

    Daha sonra, ilgi duyduğumuz veritabanına ait tabloları öğrenmek için :

    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='veritabani'

    Ve veritabanı,tablo adı belirlendikten sonra veri çekilecek kolon adları için :

    SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='tablo' && TABLE_SCHEMA='veritabani'

    Sonrasında gelecek kolon adlarına dayalı olarak hangi kolondaki bilgiyi çekmek istiyorsanız; çekersiniz.

    Bu Lab uygulamasında, screen shotlarla değil, olayın nasıl gerçekleştiğini video ile anlatmak istediğim için 3 dklık bir video hazırladım; şuradan download edebilirsiniz.Video; uzun query'leri ezberden girmeye çalıştığım için bu kadar uzadı:)

    Referanslar

    MySQL 5.0 Reference Manual :: 21 INFORMATION_SCHEMA Tables,
    http://dev.mysql.com/doc/refman/5.0/en/information-schema.html



  • Re: SQLi 103 Lab : UNION ile Veritabanı Yapısını Öğrenelim

    Kucuk bir ipucu da ben ekleyeyim, SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DATABASE() Yaparak direk o an aktif olan db deki tablo isimleri rahatca alinabilir. Yazilar super, bu bahane ile de tekrar siteyi tebrik etmek isterim.

    Re: SQLi 103 Lab : UNION ile Veritabanı Yapısını Öğrenelim

    -1/**/union/**/select/**/database(),null/* version(), Seklınde de olur.

    Re: SQLi 103 Lab : UNION ile Veritabanı Yapısını Öğrenelim

    bir ornekte ben vermek isterim U238 rumuzlu arkadasin yazdigina hitaben;

    -99+union+select+null,concat(DATABASE(),0x3a,VERSION(),0x3a,USER())/*

    bu daha hos sanirim :)

    Add a comment Send a TrackBack