Web Hack

CSRF NEDİR?

CSRF, “siteler arası istek sahteciliği” anlamında olup “Cross Site Request Forgering” deyiminin baş harflerinin kısaltılmış halidir. Developer(geliştirici-kodlayıcı)’ın deneyimsizliğinden kaynaklanan bir güvenlik zafiyetidir. Saldırı, herhangi bir son kullanıcının, kullandığı uygulamada isteği dışında işlemler yaptırtılmasıyla gerçekleştirilir. Yani kısaca kötü amaçlı kişi yöneticinin açıklığından faydalanarak saldırısını gerçekleştirmektedir. Peki saldırgan bunu nasıl yapmakta; Saldırgan bir web sitesinin kaynak koduna gömülü olan Javascript veya HTML Kodlarını uygun bir sömürme haline getirip, kurbanın haberi olmadan session (oturum) bilgilerini elde etmesiyle olur. Bu açığı sadece kurbanın şifrelerini almak diye bakmayalım çünkü bu zafiyet; para transferi, kredi kartı hırsızlıkları ve birçok kötü emellere alet edilip milletin emeğini çalabiliyor. Burada yapılan tek şey kurbana gönderdiğimiz linke tıklamasıdır. Kurban bunu yaparken olaylardan habersizdir. Tereyağından kıl çeker gibi bilgileri alır saldırgan. Bu bahsettiğimiz zafiyet bütün web uygulamalarında yani ASP,PHP,HTMLvs.. gibi. Bu saldırıyı yapmalarının amacı ise; session bilgilerini çalmak, kredi kartı bilgilerini çalmak ve bir çok kötü işlemler için kullanılmaktadır.

XSS NEDİR?

Dinamik internet sitelerinde oluşabilecek güvenlik açıklarından biride xss’dir. Yani Türkçe karşılığı; Çapraz kod çalıştırmak demektir. Saldırgan xss ile bulduğu herhangi bir web sitesini, web sitesinin açığını kullanarak saldırı yaptığında, saldırı yaptığı siteye kullanıcıymış gibi giriş yapabilir. Saldırganın saldırırken kullanacağı tek materyal tarayıcısı olacaktır. Çünkü cookie üzerinde oynama yapacaktır.
Peki xss nerede bulunur: bir web sayfası düşünelim, bu web sayfasının index.php, content.php gibi sayfaları olsun. Bu dosyalar içinden herhangi birini açalım:

www.abcdefg.com/news.php?id= gibi sayfa görenecekdir. id= degeri 12,13 gibi rakamlar belirlenir ve veritabanı içerisinde listelenmiştir. biz bu degerleri kullanarak Xss tespit yapabiliriz.

alert(korsan)www.abcdefg.com/news.php?id=>alert(korsan)

id degerine “>alert(“korsan”) yazdık

ve ekrana  alert şeklinde korsan yazısı gelecek

SQL İnjection Nedir?

Sql injection veri tabanı sorgularına dışarıdan müdahale edilerek istenmeyen bir şeyi veri tabanına insert(eklemek)’tir. Developer’ın yazdığı basit, masum sql ler hiç farkında olmadan yapması gereken işlemler dışında developer’ın başına istemeyeceği sonuçlar açabilir. Bu durum ,verileri dış dünyaya verme ya da veritabanında bir paket cağırma vs. şeklinde olabilir.

SQL Injection olması için veritabanında yazılan kodun “dynamic sql(dynamic sql)” olması gerekir.Yani SQL , gelecek parametrelere göre runtime esnasında oluşturulmalıdır.(“bind variable” kullanmanın tek avantajının performanslı kodlar yazmak olmadığı, veritabanı güvenliği (database security) içinde önemli olduğu buradan anlaşılmaktadır).

Peki saldırgan SQL İnjection nasıl yapabilir:

Diyelim SQL kullanan bir siteye user 123 kullanıcı adı ve şifresiyle giriş yapıyorsunuz. Giriş butonuna tıkladığınız anda sitenin yazılımı veritabanına aşağıdaki gibi bir sorgu gönderecektir:

SELECT * FROM kullanicilar WHERE isim=’user’ AND sifre=’123′

Yazılım sonuç bulunursa girişinize izin verecek, bulunamazsa izin vermeyecektir. Bir de kullanıcı adı ve şifre alanına ‘ OR 1=1 — yazdığımızda gönderilecek olan sorguya bakalım:

SELECT * FROM kullanicilar WHERE isim=”OR 1=1 –‘ AND sifre=”OR 1=1 –‘

Yukarıdaki sorgu gönderilecektir. Eğer yazılım girdileri filtreliyorsa SQL injectionu engelleyip girişinize izin vermeyecek, filtrelemiyorsa kullanıcı adı ve şifrenizi doğru zannedip girişe izin verecektir.

‘ OR 1=1 — SQL dilinde her zaman true döndürür (olumlu sonuç döndürür). Bu yüzden SQL programı bütün kayıtları listeleyeceğinden, yazılım doğru giriş yapıldı zannedecektir. “‘ OR 1=1 –” ifadesi, önceki koşul gerçekleşmese bile boş ver, 1=1 gerçekleşiyorsa true döndür ve sorgunun geri kalanını boş ver (– yorum anlamına geldiğinden sorgunun kalanı yorummuş gibi algılanır) demektir.

Bir örneği daha inceleyelim. SQL injectiona karşı önlem alınmamış bir makale sitesi olsun. Makaleler adres çubuğunda yazılan id’e göre gösterilsin.

makale.php?id=1

SQL açığı olduğunu bilmediğimizi varsayarak 1 yerine ‘ yazalım. SQL açığı olduğu için SQL hatası verecektir. Artık bu açığı kullanarak veritabanından istediğimiz veriyi elde edebiliriz. Zaten makale gösterilirken bir SELECT kullanıldığı için, başka verileri almak için UNION SELECT kullanıyorum.

makale.php?id=1′ UNION SELECT * FROM users

Sayfadaki bütün kullanıcılar ve şifreler bu komut ile listelenecektir.

Peki SQL İnjection’dan nasıl korunuruz:

Kullanıcıdan alınan her veride ‘ ve ” karakterleri getirilerek korunulur. Bu karakterler ya karakter koduna çevrilmeli, ya da başına \ yani kaçırma karakteri eklenmelidir. Bu durumda SQL programı o karakterleri komut olarak algılamayacaktır.