Baş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’ 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.

anahtar kelimeler : paper web uygulamasi guvenligi sql injection

uykucu - 24.04.2008

Tesekkür ederiz ferruh bey. Aydinlatici bi döküman olmus..

U238 - 24.01.2008

Sn Mavituna , mysql , mssql , acces vs Bir veritabani degil veritabani ile aradaki baglantiyi saglayan bir arac oldugunu veritabaninin sadece "dbms" den ibaret oldugunu soylemeyi sanirim unuttmus.

KUZ3Y - 14.10.2007

Güzel bir anlatim olmus .T$k

The_EsT - 10.10.2007

Merhaba..Videolarinizi anlatimlarinizi bir arkadasim araciliyya gördüm ve begendim...ßen Web programlama,Pc Programlama alaninda ilgiliyim ancak bilgim az.Burdan yararli kaynaklar Bulacagima inanaiyorum.Basarilarinizin Devamini dilerim..Bide Edit Plus ne ise yariyor onu anlayamadim :S

cianna - 07.02.2007

büyüksün baba;)

THeReAT - 30.01.2007

Çok Tesekkür Ederim...

Ferruh Mavituna - 30.01.2007

Sql Ouery Analyzer Programinin Download Linkini Verebilirmisiniz Acaba Ferruh Bey .... Cvbinizi Bekliyorum ...

SQL Server 2000 yada 2005 in icerisinde geliyor. Eger makaledeki 2005 Express i yuklersenizde o da Express Management ile geliyor ayni seyi onunla da yapabilirsiniz,

THeReAT - 30.01.2007

Sql Ouery Analyzer Programinin Download Linkini Verebilirmisiniz Acaba Ferruh Bey .... Cvbinizi Bekliyorum ...

joy - 26.01.2007

yok yok.. kesin ben sabirsizim:) e hadi:)

Ferruh Mavituna - 23.01.2007

Temel olarak ASP de ' ve " karakterlerini replace etmek yeterliydi. Peki replace metodu ile korunmaya çalisan sistemlerde SQL açisindan baska ne gibi önlem veya önlemler alinilabilir?


En pratik yontem stringler için ]SQL = replace(SQL, "'", "''")

Yani tek tirnagi iki tane tek tirnakla degistirmek. Bu SQL Serverda tek tirnaktan kaçmak için kullanilir ayni JS de backslash ya da MySQL deki gibi. Meta Karakter konusunda bunu teorik olarak biraz anlatmaya çalismistim.

Numerik beklenen datalar içinse kirli sekilde CLng() kullanimi ya da Numerik datayi almadan IsNumeric() ile kontrol etme.

Ek olarak daha iyi bir yöntem prepared SQL Query leri ve Stored Procedure kullanmak.

normalde bilgisayarimizda query analyzerde yazdigimiz bu kodlari

Sonuç itibari ile kullanici adi inputuna girdiginiz SQL ler veritabaninda çalisiyor. Arkada çalisan SQL i kendi sisteminizde tekrar yazip (bazen tahmin etmeniz gerekir bazen zaten biliyorsunuzdur) orada kendi kendinize test edersiniz. Ondan sonrada esas kismi (injection kismini) alir ve inputa girersiniz. Islem tamam.

Özetle ayni videoda oldugu gibi kullanacaksiniz.

Mad - 23.01.2007

yazdiklarinizin hepsini anladim elinize saglik fakat
normalde bilgisayarimizda query analyzerde yazdigimiz bu kodlari
sql injection deniyecegimiz bir sistem için nasil uygulayacagiz o kismini çözemedim dogrusu? :S

Fatih ÜNAL - 23.01.2007

D/*x*/R/**/OP members SQL cümlecigi “DROP“ kelimesine dayali çalisan herhangi bir filtreyi geçecek.
(Herkesin Ferruh bu yorumu nerde yapmis der gibi bu cümleyi aradigini gördüm. Makaleden alinti arkadaslar.)

Bu durumda Replace(degisken, "drop", "drop", 1, -1, 1) gibi replace ler de ise yaramayacaktir.
Ughh ... Temel olarak ASP de ' ve " karakterlerini replace etmek yeterliydi. Peki replace metodu ile korunmaya çalisan sistemlerde SQL açisindan baska ne gibi önlem veya önlemler alinilabilir?

Yorum Yazın


Tüm yorumlar onaydan geçmektedir, bu işlem en uzun 30 dk. sürecektir. E-mail adresleri yeni yorumları bildirme harici hiç bir başka amaçla kullanılmamaktadır ve sitede gözükmemektedir.

Yeni yorumlardan haberdar et

Captcha Kodu