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

22.01.2007

Okuyucu : 13.814
Günlük Okuyucu : 28,7

Ü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.

Yorumlar

RSS Bu makalenin yorumlarını RSS ile takip et!

D/*x*/R/**/OP members SQL cümleciği “DROP“ kelimesine dayalı çalışan herhangi bir filtreyi geçecek.(Herkesin Ferruh bu yorumu nerde yapmış der gibi bu cümleyi aradığını gördüm. Makaleden alıntı arkadaşlar.)

Bu durumda Replace(degisken, "drop", "drop", 1, -1, 1) gibi replace ler de işe yaramayacaktır.
Ughh ... Temel olarak ASP de ' ve " karakterlerini replace etmek yeterliydi. Peki replace metodu ile korunmaya çalışan sistemlerde SQL açısından başka ne gibi önlem veya önlemler alınılabilir?

Fatih ÜNAL [ # | 23.01.2007 ]

yazdiklarinizin hepsini anladım elinize sağlık fakat
normalde bilgisayarımızda query analyzerde yazdıgımız bu kodları
sql injection deniyeceğimiz bir sistem için nasıl uygulayacağız o kısmını çözemedim doğrusu? :S

Mad [ # | 23.01.2007 ]

Temel olarak ASP de ' ve " karakterlerini replace etmek yeterliydi. Peki replace metodu ile korunmaya çalışan sistemlerde SQL açısından başka ne gibi önlem veya önlemler alınılabilir?

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

Yani tek tırnağı iki tane tek tırnakla değiştirmek. Bu SQL Serverda tek tırnaktan kaçmak için kullanılır aynı JS de backslash ya da MySQL dekı gıbı. Meta Karakter konusunda bunu teorik olarak biraz anlatmaya çalışmıştım.

Numerik beklenen datalar içinse kirli şekilde CLng() kullanımı ya da Numerik datayi almadan IsNumerıc() ile kontrol etme.

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

normalde bilgisayarımızda query analyzerde yazdıgımız bu kodları
Sonuç itibarı ile kullanıcı adı inputuna girdiğiniz SQL ler veritabanında çalışıyor. Arkada çalışan SQL i kendi sisteminizde tekrar yazıp (bazen tahmin etmeniz gerekir bazen zaten biliyorsunuzdur) orada kendi kendinize test edersiniz. Ondan sonrada esas kısmı (injection kısmını) alır ve inputa girersiniz. İşlem tamam.

Özetle aynı videoda olduğu gibi kullanacaksınız.

Ferruh Mavituna [ # | 23.01.2007 ]

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

joy [ # | 26.01.2007 ]

Sql Ouery Analyzer Programının Download Linkini Verebilirmisiniz Acaba Ferruh Bey .... Cvbınızı Bekliyorum ...

THeReAT [ # | 30.01.2007 ]

Sql Ouery Analyzer Programının Download Linkini Verebilirmisiniz Acaba Ferruh Bey .... Cvbınızı 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,

Ferruh Mavituna [ # | 30.01.2007 ]

Çok Teşekkür Ederim...

THeReAT [ # | 30.01.2007 ]

büyüksün baba ;)

cianna [ # | 07.02.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

The_EsT [ # | 10.10.2007 ]

Güzel bir anlatim olmus .T$k

KUZ3Y [ # | 14.10.2007 ]

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.

U238 [ # | 24.01.2008 ]

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

uykucu [ # | 23 gün, 21 dk ]

Yorum Ekle





Kullanılabilir Taglar : [<blockquote>] [<strong>] [<em>]

Başka bir kullanıcı olarak giriş yapma ile İlişkili Olabilecek Yazılar - Haberler

SQL Tunnelling - Exploiting Internal Networks via SQL Injection
İleri Seviye Javascript
Türkçe SQL Injection Referansı
Web Güvenlik Topluluğu 9 Mart Kadıköy Buluşması
Hala SSL' i Anlayamadılar

Diğer Yazılar

Neredeyim ?

Ferruh.Mavituna » SQL Injection Dersleri » Başka bir kullanıcı olarak giriş yapma

Ferruh Mavituna
© 2002-2007, Ferruh Mavituna

Sabit IP Adresi : 81.22.99.133, SSL Erişimi, Hakkında