SQL Injection, Bölüm 1
10 Ekim 2006 tarihli, Güvenlik köşesine ait yazı.
Bu yazı SQL Injection tekniklerini öğrenip sitelere zarar vermek isteyenlerden çok, işin temelini anlayıp gerekli önlemleri almak isteyen sunucu yöneticileri, programcılar için yazılmış olup, SQL Injection Walkthrough yazısının bir çevirisi niteliğindedir. 2 bölümden oluşan yazının ilk bölümünde SQL Injection’a giriş ve temel saldırı tekniklerini inceliyoruz.
1 Giriş
Bir sunucunun yalnızca 80 numaralı portu açıksa, port tarayıcılarının bir açık yakalayamayacağını ve admin’in gerekli patch’leri yaptığını bilirsiniz. Bu durumda geriye web hacking methodları kalır. SQL injection yalnızca 80. porta ihtiyaç duyan, sunucuya veya sunucunun işletim sistemine değil de üzerinde çalışan uygulamalara (ASP, JSP, PHP, CGI gibi) saldıran bir tekniktir.
1.2 SQL Injection Nedir?
SQL Injection, web sayfalarını kullanarak SQL sorgusu ve komutu gönderme tekniğidir. Birçok site kullanıcıdan aldığı parametrelerle veritabanına sorgular göndermektedir. Örnek olarak kullanıcı girişi sayfasını düşünün, girilen ad ve şifre yardımıyla bu kişinin kayıtlı bir kullanıcı olup olmadığı veritabanına sorulur. SQL Injection ile SQL sorgusunu değiştireceğimiz ve istediğimiz bilgilere ulaşabileceğimiz sonuçlar elde edebiliriz.
1.3 Malzemeler
Sadece internet tarayıcısı.
2 Neleri Aramalısınız?
Kullanıcının bilgi gönderebileceği sayfaları bulmalısınız; mesela kullanıcı girişi, arama sayfası, yorum sayfası gibi. Genelde html sayfaları kullanıcı girdilerini gönderirken POST methodunu kullanırlar, böylece sayfanın adresinde parametreleri göremezsiniz. Bu durumda sayfanın kaynak kodunu inceleyerek hangi parametreleri gönderdiğini bulabilirsiniz. Arayacağınız html etiketi form olmalı, örnek olarak:
< input type="hidden" name="A" value="C" />
< form>
form etiketleri arasındaki herşey potansiyel parametrelerdir.
2.1 Ya input alan bir sayfa bulamazsam?!
Sitede ASP, JSP, CGI veya PHP gibi sayfalar aramalısınız. Özellikle aşağıdaki gibi parametre alan sayfalara dikkat edin:
http://www.example.com/index.asp?id=10
3 Bu sayfa uygun mu, nasıl test ederim?
Tek tırnak hilesiyle başlayabilirsiniz. Bunun için input alanına hey' or 1=1-- girin. Örnek:
- Kullanıcı adı:
hey' or 1=1-- - Şifre:
hey' or 1=1-- - http://www.example.com/index.php?id=hey’ or 1=1–
Eğer bu işlemi hidden bir input alanıyla yapmanız gerekiyorsa sayfanın kaynak kodunu bilgisayarınıza kaydedip form alanını aşağıdaki şekilde düzenleyin.
< input type="hidden" name="A" value="hey' or 1=1--">
< /form>
Şanslıysanız siteye kullanıcı adı ve şifre olmadan giriş yapmış olacaksınız.
3.1 Ama neden ‘ or 1=1–?
Bu hileyi siteye giriş yapmanın yanında ekstra bilgilere ulaşmak için kullanabilirsiniz. Örnek olarak aşağıdaki ASP sayfasını ele alalım:
URL’de category değişkenin adı, ve food ise bu değişkene atanan değerdir. Food kategorisindeki bilgileri listelemek için kullanılacak kod aşağıdaki gibidir:
sqlstr = “SELECT * FROM product WHERE PCategory=’” & v_cat & “‘”
set rs = conn.execute(sqlstr)
Gördüğünüz gibi gönderdiğimiz bilgi v_cat değişkenine atandı, daha sonra bu değişkenle bir SQL sorgusu oluşturuldu.
Yorumlar - Başa Dön
20 Ekim 2006
INPUT etiketinin NAME özniteliğini sayfa her yüklendiğinde değiştirmek lâzım diye düşünüyorum. http://www.ileriseviye.org/arasayfa.php?inode=php-form-security.html sayfasında bahsedildiği gibi…
28 Kasım 2006
Hocam gercekten cok iyisine paylasımlarından dolay ıseni kutlarım bu sql olayında genellikle kullanılan .asp lerde .phplerde cok nadir yok denilicek kadar rastlanıyor ama tabiki .php dede var bu injektion :)
7 Aralık 2006
ben ‘OR’ diye bi açık buldum fakat o açıgın kodlarıyla oynayıp yönlendirilmesi gereken yere yönlendirme yapamıyorum yada deyişiklikleri agdaki başka bilgisayardaki bilgilere girmek için kullanamıyorum uzantıda asp.bana yardımcı olurmusunuz
7 Aralık 2006
Buradaki bilgileri saldırı amaçlı kullanmamanızı öneririm, nitekim artık birçok sunucu farklı yöntemlerle kayıtlar log tutuyor ve IP adresinizden kim olduğunuz istendiği takdirde bulunabiliyor. Ülkemizdeki nadir bilişim suçluları arasında bir okurumu görmek istemem :)
28 Şubat 2007
Sql İnjectionlar asp yada php olmasına baglı degil . Eğer Acces yada Sql server yada Tablo adı varsa Msql Kullanıyo0rsa , o zaman sistemde açık ararsınız . Önemli olan asp yada php degil :)