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

22-1-2007

Ü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’ 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 “/*“ 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. “--“ İki tirenin anlamı kodun geri kalanını yeni satıra kadar yorum olarak kabul et demektir. Genelde “Line Comment” olarak geçer ve biz daha sık bunu kullanacağız.

Birinci bölümdeki videoyu tekrar izlerseniz bunu nasıl da işimize yarar bir şekilde kullandığımızı daha iyi görebilirsiniz.

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’ 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ı “exploit” ederken SQL cümleciklerinin arka kısmındaki olası hatalardan kendimizi korumak için hemen hemen her Injection’ ı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.

Video’ da ki başka bir kullanıcı olarak üye girişi yapma işleminin üzerinden geçelim. İlk olarak üye girişinde çalışan SQL kodumuzu hatırlayalım.

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

Bir önceki saldırıda basit şekilde ‘ 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 “DROP“ kelimesine dayalı çalışan herhangi bir filtreyi geçecek ve başarılı şekilde members tablosunu silecektir.

Bu konu ilerleyen bölümlerde detaylı olarak anlatılacaktır.

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=’yonetici’--’ AND password=’aksjdhaskd

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

Gayet basit ve açıklayıcı değil mi? 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! Tebrikler.

Hacker' ın Notu

Ş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. “abcd” 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.

Recent Blog Posts

See all of the blog posts