27 Temmuz 2013 Cumartesi

sql injeksiyon genis anlatim 1

aşka bir kullanıcı olarak giriş yapma

Üye girişi yapmaktan bahsetmiştik. Aslında genelde ilk üye yönetici olur bu yüzden şanslıyız ama tabii ki bize bu yetmez. Biraz daha yeni numaraya ve detaylara ihtiyacımız var. Bu yüzden şimdi nasıl başka bir kullanıcı olarak üye gişiri yapacağımızı göreceğiz. Başka bir kullanıcı olarak üye girişi yapmanın başka yöntemleri de var ancak bu bölümde en basitini inceleyeceğiz. Ek olarak bu yöntemi daha sonraki ileri seviye SQL Injection***8217; larda da sık sık kullanacağız.

SQL dili aynı diğer programlama ve betik (scripting) dilleri gibi kodun arasına kendi notlarımızı eklememiz için yorum (comment) özelliği sunar.

---------------------------------------------------------------------------------------------------------------
Exploit veya Exploit Etmek Nedir?

Bir sistemin herhangi bir açığını kullanarak sisteme istenilen işlemin yaptırılmasına basit şekilde exploit etmek diyebiliriz. Örnek olarak bir üyelik sisteminin SQL Injection üzerinden exploit edilmesi o sistemi SQL Injection açığı aracılığı ile ele geçirmek, sistemden data çalmak ya da özetle sistemde normalde yetkinizin olmadığı bir işlemi yapmanız anlamına gelir.

Exploit ise tek başına sistemdeki açığı kullanan herhangi bir şekilde kod parçasıdır. Bu bir dosya, derlenmiş kod, script veya özel şekilde hazırlanmış bir URL olabilir.

---------------------------------------------------------------------------------------------------------------

Örnek olarak SELECT * FROM/*Uye bilgilerini alalim*/members kodu hiç bir sorun çıkarmadan çalışacaktır. Yeşil kısım veritabanı tarafından göz ardı edilecektir ve sadece geliştiricinin bir notu olarak düşünülecektir.

Ek olarak bu kod da sorunsuz şekilde çalışacaktır SELECT * FROM/*Uye bilgilerini alalim members

Dikkat ettiyseniz ***8220;/****8220; ile açılan yorum kısmını hiç kapatmadık. Koda bakarsanız bu durumda kodun geri kalanının da yeşil olduğunu ve yorum olarak kabul edildiğiniz görebilirsiniz. Dolayısıyla bu yorum sentaksını SQL cümleciğinin geri kalanını göz ardı etmek için kullanabiliriz!

İki ana yorum sentaksı vardır;
SELECT * FROM/*Uye bilgilerini alalim*/members
ya da
SELECT * FROM--Uye bilgilerini alalim

Gördüğünüz gibi ikinci seferde yeni bir kod kullandık. ***8220;--***8220; İki tirenin anlamı kodun geri kalanını yeni satıra kadar yorum olarak kabul et demektir. Genelde ***8220;Line Comment***8221; olarak geçer ve biz daha sık bunu kullanacağız.

--------------------------------------------------------------------------------------------------------

Veritabanı Farklılıkları

Daha önceden de bahsettiğimiz gibi uygulamaların kullandığı veritabanları farklı olabilir. Şimdiye kadar ki örnekler MS SQL Server baz alınarak yazıldı ancak normalde başka veritabanları ile de karşılaşabilirsiniz.

Web uygulamaları için en popüler veritabanları MySQL ve MS SQL Server***8217; dır. Bunun harici karşılaşılabilecek hepsi değil ama bazı diğer veritabanları şunlardır,

· Oracle

· PostgreSQL

· IBM DB2

· MS Access

· Sybase

Veritabanları arasında temel bir ANSI SQL dil standardı olsa da bir çok veritabanı ekstra fonksiyonlar ve farklı işlemler için farklı fonksiyonlar ve sentaks kullanır. İlerleyen derslerde hem veritabanlarındaki farklılıklardan hem de işimize yaracak ekstralarından ve işimizi zorlaştıracak yanlarından bahsedeceğiz.

--------------------------------------------------------------------------------------------------------

Yorum karakterleri SQL Injection maceralarımızda en iyi dostlarımızdan biri olacak çünkü bir çok SQL Injection açığını ***8220;exploit***8221; ederken SQL cümleciklerinin arka kısmındaki olası hatalardan kendimizi korumak için hemen hemen her Injection***8217; ın sonunda bunu kullanacağız.

Aslında hemen hemen her durumda yorum karakterlerini kullanmadan da istediğimizi elde edebiliriz ama istediğimizi yorum karakteri olmadan elde etmek için ekstra efor harcamamız gerekecektir.

SELECT * FROM members WHERE username=***8217; kullanıcı adı ***8217; AND password=***8217; şifre ***8217;

Bir önceki saldırıda basit şekilde ***8216; OR 1=1 enjekte etmiş ve herhangi bir kullanıcı olarak üye girişi yapmıştık. Şimdi ise başka bir kullanıcı olarak giriş yapabilmek için SQL cümleciğini öyle bir modifiye etmeliyiz ki sonuçlarda sadece istediğimiz kullanıcı dönmeli.

--------------------------------------------------------------------------------------------------------

Yorum Karakterlerinin başka kullanımları

Yorum karakterleri IDS, WAF (Web Application Firewall) ya da uygulama temelli filtreleri aşma amaçlı da kullanılır. Konsept hakkında fikir olmak adına basit bir örnek D/*x*/R/**/OP members SQL cümleciği ***8220;DROP***8220; kelimesine dayalı çalışan herhangi bir filtreyi geçecek ve başarılı şekilde members tablosunu silecektir

--------------------------------------------------------------------------------------------------------

O zaman yorum karakterlerinin de gücünden faydalanarak kullanıcı adına şu şekilde bir şey girdi yaparsak istediğimiz kullanıcı olarak üye girişi yapabiliriz.


SELECT * FROM members WHERE username=***8217;yonetici***8217;--***8217; AND password=***8217;aksjdhaskd***8217;

Gördüğünüz gibi SQL cümleciği şu hale dönüştü;
SELECT * FROM members WHERE username=***8217;yonetici***8217;


members tablosundan username kolonu yonetici olan kullanıcıyı getir. Bu işlemin sonucu olarak başarılı bir şekilde yonetici kullanıcısı olarak üye girişi yapmış olacaksınız!


DİPNOT = Şifre kısmına herhangi bir şey girdik çünkü bir çok web uygulaması (SQL ile) kullanıcıyı kontrol etmeden önce girilen değerlerin boş yada 3 karakterden az olup olmaması gibi kontroller yapar. ***8220;abcd***8221; gibi rasgele bir kaç karakter girerek bu olasılığı egale etmiş olursunuz.

Dikkatli olun ve girdiğiniz değerlerin uygulamanın limitleri içerisinde olduğundan emin olun. Boş bırakırsanız ve "giriş başarısız" gibi bir mesaj ile karşılaşabilir ve uygulamanın güvenli olduğuna dair yanlış bir kanıya kapılabilirsiniz.

----------------------------------------------------------------------------------------

SQL Injection Test Laboratuarı Kurma

Eğer bir önceki anlattıklarımızı elinizi kirletmeden anladığınızı düşünüyorsanız, büyük bir yanılgı içerisindeniz.

Şimdi hemen bir test sistemi kuracağız ve siz de buradaki tüm işlemleri bu test sisteminde test etme fırsatı bulacaksınız. Bu sistemi kurmanızı ve tüm buradaki işlemleri ve daha fazlasını kendi sisteminizde test etmeniz şiddetle tavsiye edilir.

Bu sistem daha sonraki bölümlerde ve kendiniz yeni bir SQL Injection üzerinde çalışırken çok işinize yarayacak.

Sistemi kurabilmemiz için 2 ana materyale ihtiyacımız var,

1 - Web Sunucusu
Testlerimizde IIS (Internet Information Services) kullanacağız. Teknik olarak ASP çalıştırabilen herhangi bir web sunucusuda olabilir ancak olası sorunları ortadan kaldırmak için IIS kullanmanız tavsiye edilir.

a - Windows XP Professional

b - Windows 2003

c - Windows NT

d - Windows Vista işletim sistemlerinde IIS çalışacaktır. IIS ***8220;Kontrol Paneli > Ekle Kaldır > Windows Components***8221; altından kurulabilir. ASP desteğini seçmeyi unutmayınız.

2 - Veri Tabanı
Belirttiğimiz gibi veritabanı olarak şu an SQL Server a ihtiyacımız var. SQL Server 2005 Express ücretsiz olarak indirilebilir veya elinizde varsa SQL Server 2000***8217; i de kullanabilirsiniz.

SQL Server ve IIS kurulum yönetim detaylarına burada değinilmeyecektir, eğer bunlarla ilgili sorun yaşıyorsanız Google Amcaya sorun sorunlarınızı çözüp ve kaldığınız yerden devam edin.

Daha iyi ve kullanışlı bir test sistemi oluşturabilmek için www.vmware.com/ kullanabilirsiniz. VmWare ücretsizdir, Kurduktan sonra sisteminizde sanal yeni bir işletim sistemi oluşturma şansınız olacak.

1 yorum: