[Owasp-turkey] BSQL Hacker Beta Versiyon - v0.9

Ferruh Mavituna ferruh at mavituna.com
Mon Sep 3 04:28:21 EDT 2007


Bedirhan ve Kerem ikinizinde yorumlari icin cok tesekkurler,

Ancak cevap verebiliyorum kusura bakmayin yaklasik bir haftadir hasta
sekilde evde yatiyorum.


   - http proxy kullanamadim (ilk basta dogru calistiramadigimdan sql
hatalarimi gormek icin kendi IIS'imin loglarina bakmak zorunda kaldim)

Proxy' yi bir test etmem lazim, calismayan GUI elementlerinden biri olabilir
:) Bunun harici HTTP cevaplarini outputlarini history de normalde
gorebiliyor olman lazim.

   - hazirlanan sql cumlecigini bir sekilde calistirmadan gormek guzel
olurdu (en azindan ilk cumlecikleri, yani {POSITION}=0, {CHAR}=40 degerleri
ile mesela)

Bu da yapilacaklar listemde kesinlikle cok onemli dedigin gibi,

   - once length hesaplamayi dusunur musun? Extract edecegin bi verinin
bitip bitmedigini nasil anliyorsun (100 gibi bir max len deger mi var?).

Aslinda bu kisim biraz degisik ileride onceden length hesaplamayi opsioyonel
olarak koyacagim. Su an tamamen donen dataya gore datayi alirken length' i
kesfediyor. Dolayisiyla onceden length hesaplmaya gerek kalmiyor ama bu
yontem bazi noktalarda sorun cikardi. Max Length ozelligi ise tamamen extra
cok uzun datalar icin. Ama onceden length hesaplmayi da ekleyecegim. Bitip
bitmedigini ozetle donen datanin null olmasindan anliyorum.

Bu NNNNNNNNNNNNNN olayi bir kac durumda olabiliyor. Query yanlis olunca,
length tespti edilmeyince vb. baska ilginc durumlar. GEnelde length ile
alakali olmasi gerekiyor.


SQL Injection Cheat Sheet' i de bir tabda yuklemeyi planliyorum, bir de
guncelleme destegi ile.


a) BrwMain'de ScriptErrorSuppressed = True yapabilirsen, indirilmiş olan
html içeriği gösterilirken oluşan script error dialog boxlarından
kurtulabiliriz :)

- Evet bunu unutmusum kesinlikle koyacagim

b) Bir Static Constructorla HttpRequest Classinin icinde su handler
atamasinin bir kere olmasini saglayabilirsin.

Dogru ya basit static ile hemen isi cozebilirim, duzelteyim onu da.


String.IsNullOrEmpty olayi mantikli sanirim en iyisi buna her zaman elimi
alistirmak.


d) Ayrica kullandığın regular expressionları ya static olarak , ya da
property set edildiginde ...
Evet bu aklimdaydi performans icin biraz yardimci olabilir.


e) Gene çok dikkat ettiğini koddada görmeme rağmen string concatları
StringBuilder veya String.Format ile yapabilirsen kod okunurluğu artabilir
kanaatindeyim.

Eger data 1000+ karakter uzerinde olmayacaksa genelde stringbuilder
kullanmiyorum daha okunaksiz oluyor bence, bu tamamen kisisel bir bakis
acisi tabii ki :)


Ayrica en azindan Console bazlı tarafın mono'ya port edilmesinede talibim,
seninle bununla ilgili olarakta bir time plan çıkartabiliriz.
Bu super bir teklif Kerem, cunku bende ozelliikle bu konuda destek
verebilecek ve vakit ayirabilecek birini ariyordum. Cok memnun olurum. Nasil
baslayabiliriz o konuda bir fikrim yok, stabil ilk versiyonu beklemek
sanirim en mantikli cozum su an. ilk stabil versiyon ciktiktan sonra console
da Mono icin gerekli tum degisiklikleri yapariz. Benim mono da cok fazla
deneyemim yok ama bir kac test sonucunda .NET Framework VB uygulamalarini
calistiramadim neden dolayi oldugunu bilmiyorum.

Bu konuda benimle gene iletisime gecersen Mono da da calistirmak cok guzel
olacaktir.


Tesekkurler,

On 29/08/07, Izzet Kerem Kusmezer <keremskusmezer at gmail.com> wrote:
>
> Merhabalar,
>
> Oncelikle ellerine saglik guzel bir arayüz ve uygulama geliştirmişsin.
> 2 - 3 tane ufak önerim olacak, daha koda tam olarak bakamadım ama kısaca
> gozume çarpanlar:
>
> a) BrwMain'de ScriptErrorSuppressed = True yapabilirsen, indirilmiş olan
> html içeriği gösterilirken oluşan script error dialog boxlarından
> kurtulabiliriz :)
>
> b) Bir Static Constructorla HttpRequest Classinin icinde su handler
> atamasinin bir kere olmasini saglayabilirsin.
> Shared Sub New()
> 'PERFORMANCE: May we can put it to somewhere else for only one execution
> ServicePointManager.ServerCertificateValidationCallback = New
> Net.Security.RemoteCertificateValidationCallback( AddressOf
> Helpers.ValidateCertificate)
> End Sub
>
> c) Ayrıca String kontrolleri için String.IsNullOrEmpty ' i kesinlikle
> tavsiye ederim , boyle If tmpStr = String.Empty'de gözden kaçabilecek null
> olma durumlarınıda kapsıyor olacaksın. Veya direkt olarak söyle bir
> IsStringReallyEmpty diye bir method :)
>
> Public Function IsStringReallyEmpty(SourceText as String) as Boolean
>      Return CBool(IIf(String.IsNullOrEmpty(SourceText),True,
> String.IsNullOrEmpty(SourceText.Trim())))
> End Function
>
> d) Ayrica kullandığın regular expressionları ya static olarak , ya da
> property set edildiginde
> Dim tempEx As New System.Text.RegularExpressions.Regex ("kerem",
> RegularExpressions.RegexOptions.Compiled)
> gibi tutarsan her seferinde RegEx.IsMatch'te pattern geçişi yapıldığındaki
> parse maliyetindende kurtulmuş olursun.
>
> Bu arada belki Database Interface implementasyonları plugin based bir
> yapıya geçirebilirsin diye düşünüyorum, böylece mesela aynı database için
> farklı methodlarla kontroller yapan bir motor oluşturulabilir. Ben böyle bir
> plugin yapısını implemente etmek için şimdiden talibim, elimde kendi
> projelerim için yazmış olduğum bir plugin engine var ve rahatlıkla
> kullanabiliriz.
>
> e) Gene çok dikkat ettiğini koddada görmeme rağmen string concatları
> StringBuilder veya String.Format ile yapabilirsen kod okunurluğu artabilir
> kanaatindeyim.
>
> Kesinlikle cross thread gui access ve invoke kullanım tarzına gerçekten
> bayıldım, ellerine sağlık.
>
> Ayrica en azindan Console bazlı tarafın mono'ya port edilmesinede talibim,
> seninle bununla ilgili olarakta bir time plan çıkartabiliriz.
>
> Gerçekten çok faydalı bir tool yazmışın, elimden gelen yardımda bulunmak
> isterim.
>
> Saygılarımla
> Kerem Küsmezer
>
> 27.08.2007 tarihinde Ferruh Mavituna <ferruh at mavituna.com > yazmış:
> >
> > Selamlar,
> >
> > Cok uzun zaman once basladigim ancak yakin donemde tekrar yazmaya
> > basladigim bir Blind SQL Injection programi var. Ilk beta verisyonunu
> > yayinladim. Henuz beta bile denemez belki ama en azindan calisiyor.
> > Dokumantasyon cok zayif henuz, uzerinde calisiyorum.
> >
> > Lisans GPL, stable versiyon insallah 1-2 ay icerisinde yayinlanacak.
> >
> > Program ozetle Blind SQL Injection lari otomatik olarak exploit etmek
> > icin gelistirildi. Hemen hemen her durumda her sekilde SQL Injection' i her
> > database den alma amaci ile yazdim. Ancak bu esnekligin bedeli programi
> > konfigure etmek biraz zor. Ben cok uzun suredir kendi testlerimde
> > kullaniyorum. Diger SQL Injection araclarinda olmayan bir cok gelismis
> > ozellige sahip mesela Nonce lari kullanabilme ( degisken viewstateler
> > gibi rasgele deger kullanan formlari exploit ederken).
> >
> > Konsol ve GUI olarak iki farkli uygulama var GUI de her ozellik yokken
> > konsolda da GUI deki her ozellik yok. Sonucta ikiside hemen hemen tum
> > ozelliklere sahip olacak. GUI "otomatik injection" modunda calisabiliyor. Bu
> > modda injection a basladiktan sonra eger DB yapisi destekleniyorsa ( su
> > an sadece SQL Server modulu calisiyor) tum db semasi ve kayitlar
> > otomatik olarak cekiliyor.
> >
> > Genis ve bir o kadar karisik / guncellenmemis ve zaman zaman yanlis olan
> > bir dokumantasyon var. Konsol versiyonu kullanacaksaniz ozellikle kesinlikle
> > bunu kontrol edin. Ek olarak parametrelerden de uygulamanin neleri
> > destekledigini gorebilirsiniz.
> > http://ferruh.mavituna.com/makale/bsql-hacker-console-manual/
> >
> >  Sadece Uygulama :
> > http://ferruh.mavituna.com/opensource/BSQLHacker_v09_Binary.zip
> >
> > .NET Framework 3.5 gerekebilir ama .NET Framework 2.0 ile de calismasi
> > gerekiyor
> >
> >
> > Kaynak Kodu :
> > http://ferruh.mavituna.com/opensource/BSQLHacker_v09_Source.zip
> >
> >
> > Kullananlar olursa her turlu yorum, oneri, hata bildirilerine
> > bekliyorum. Dedigim gibi tum yazilimi tamamen test amacli kabul edebilirsin,
> > ilginc hatalarla karsilasilabilirsiniz ya da bazi GUI formlarinin henuz
> > calismadigini gorebilirsiniz.
> >
> >
> > Kullanim Ornegi (Klasik bir SQL Injection icin) :
> > http://localhost/sqlserver/?p=1 AND ISNULL(ASCII(SUBSTRING(( {INJECTION}
> > ),{POSITION},1)),0){OPERATION}{CHAR}--
> >
> > Kalin olan yazilar dinamik degiskenler, sadece {INJECTION}  "Automated
> > Attack" kullanilcaksa kullaniliyor. Aksi takdirde buraya kendiniz herhangi
> > bir SQL query koyabilirsiniz. Bu Query sadece bir kayit dondurmek zorunda.
> > Bu ornek SQL Server icin ama ne yapmaniz normalde biliyorsaniz basitce
> > ORACLE, PostgreSQL, MySQL vs. icinde benzer kodlar yazabilirsiniz. Ben
> > MySQL, ORACLE ve SQL Server da cesitli testler yaptim. Ek olarak MySQL
> > Benchmark ve SQL Server WAITFOR DELAY tarzi full blind' lari destekliyor.
> >
> > Bu dinamik degiskenler ana adreste Request & Injection  tabi altindaki
> > heryerde kullanilabilir. Dolayisiyla GET, POST, HTTP HEADERS ve Cookie lerde
> > injection yapabilirsiniz.
> >
> >
> >
> >
> > Tesekkurler,
> >
> >
> > --
> > Ferruh Mavituna
> > http://ferruh.mavituna.com
> > _______________________________________________
> > Owasp-turkey mailing list
> > Owasp-turkey at lists.owasp.org
> > https://lists.owasp.org/mailman/listinfo/owasp-turkey
> >
> >
>


-- 
Ferruh Mavituna
http://ferruh.mavituna.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://lists.owasp.org/pipermail/owasp-turkey/attachments/20070903/d26eee31/attachment.html 


More information about the Owasp-turkey mailing list