THT DUYURU

Web & Server Güvenliği Doğru web ve veritabanı sunucusu güvenliği sağlanmadan, bilgisayar korsanları hassas verilerinize erişebilir. Web, Sunucu ve veritabanı güvenliğini nasıl sağlayacağınızı buradan öğrenebilirsiniz.

chat
Seçenekler

Sql Injection Database Errors-Part I~Bug Res.

S4cuRiTy EneMy - ait Kullanıcı Resmi (Avatar)
Forumdan Uzaklaştırıldı
Üyelik tarihi:
04/2012
Nereden:
root@server
Yaş:
24
Mesajlar:
8.779
Konular:
1513
Teşekkür (Etti):
968
Teşekkür (Aldı):
3105
Ticaret:
(0) %
26-10-2013 17:02
#1
Sql Injection Database Errors-Part I~Bug Res.

Merhabalar arkadaşlar bu yazı dizisinde sizlere özellikle Sql Injection’a yeni başlayanların kafasını bir hayli karıştıran Veri Tabanı(Database) hatalarından bahsedeceğim,ve Allah’ın izni ile bu konuyla birlikte -şöyle bir hata alıyorum sql injection var mı burada?- nev’inden soruları asgari düzeye indereceğiz.

Sql Injection Database Errors

İlk olarak konumuza bir figür ile başlayalım.



Yukarıdaki figürümüzde,bir Sql Injection denemesi yaptığımızda bunun;Web sunucusu tarafından cevaplanması,ardından veri tabanı sunucusu tarafından cevaplanarak bize ne şekilde ulaştığı şematize edilmiştir.Şimdi yukarıdaki 1,2,3 ve 4 numaralı evreleri detaylıca irdeleyelim:

1-Bu evrede kullanıcımız attacker’ şeklinde bir deneme yaparak sunucuya bir istekte bulunur.

2-Web sunucusu bu isteği alır ve database sunucusunu iletir.

3-Veritabanı sunucusu bozuk/işlevi olmayan bir Sql sorugusu alır ve tekrar web sunucusuna hata verir.

4-Bu son kısımda da web sunucusu,veritabanı sunucusundan aldığı hatayı HTML sayfasına yansıtarak son kullanıcıya cevap verir.

Evet,yukarıdaki döngüden saldırıyı yapan kişiye(kullanıcıya) değişik şekillerde dönüt alınabilir bunlara gelen olarak bakacak olursak:

*Sql hatası kullanıcıya web browser tarafından ekranda gösterilebilir..

*Sql hata ayıklama amacıyla veritabanının verdiği hatayı gizleyip ekranda göstermeyebilir..

*Hata tespit edildiğinde başka bir sayfaya yönlendirme yapılabilir..

*HTTP hata kodu 500(Internat Server Error) yahut HTTP yeniden sayfaya yönlendirme kodu 302 çalıştırılabilir..

*Web uygulaması alınacak hataya düzelterek verir ya da genel bir hata sayfasını gösterebilir..

Maddelerimizden de anlaşılacağı gibi,bir Sql Injection saldırı aşamasında alınan hataları iyi tanımlamak gerekir.Wen uygulamasının bize dönütünü iyi okumak gerekir ki hedefe ulaşmamız daha kolay olsun.

Şimdi işleyeceğimiz konularda karşılaşabileceğimiz en yaygın senaryolar üzerinde duracağız inşAllah.

En Yaygın Sql Hataları

Burada vereceğimiz örnekler en tipik Sql Inecjtion hataları olacaktır.

Microsoft Sql Server Errors

Önceki bölümde veritabanına bir sorgu gönderildiğinde bunun bize dönüt olarak ne tür hatalarla gösterildiğini gördük.Bu şekilde bir işlemin yani web sunucusundan bize gelen hatanın tanımlanması Sql Injection yaparken bizim işimizi bir hayli kolaylaştıracaktır.

Tabii ki bizim için en iyisi tam anlamıyla bir SQL hatasıyla karşılaşmamızdır ama bu herzaman mümkün olmuyor.Şimdi vereceğimiz örnekler en tipik hataları tanımamızda bize yol gösterici olacaktır.

Sql Injection yapılırken yaygın olarak tek tırnak(’) kullanılır.Bunun nedeni Sql dilinde tek tırnaklar arasında sayısal değerlerin muhafaza edilmesinden kaynaklıdır yani daha açık belirtirsek kodlamada hata yapılmışsa tek tırnak sorgusu enjekte edildiğinde dışarıya bunun hatasının verilmesidir.

Bir önceki tek tırnak ile Sql Injection denememizde bir hata ile karşılaşmıştık.Şimdi aynı yöntemin farklı sonuçlar doğurabileceğini görelim:

http://www.hedefsite.com/showproduct...acker%E2%80%99

Bize bu işlem hata olarak ekranda şu şekilde yansıyabilir:



Evet arkadaşlar,açıkçası her hata kodunu ezberlemek gerekmiyor.Önemli olan ne zaman ve neden bir hatanın oluştuğunu anlamaktır.Her iki örnekte de veritabanı üzerinde çalışacak olan SQL deyiminin şuna benzer bir şey olması gerektiğini düşünebilirsiniz:

SELECT *

FROM products

WHERE category=’attacker’’

Yukarıdaki uygulamada gördüğünüz gibi son kısımda tek tırnak yerine ’’ tırnak işareti kullanılmıştır bu kısıma uygulanacak Sql Injection sonucunda database bize bu sözdizimi üzerinden hata olarak cevap verecektir.

Buraya kadar alfanumerik (harf ve sayıdan oluşan) dize üzerine yapılan bir enjeksiyon çeşidini gördük.Şimdi vereceğimiz örnekte sayısal değerli söz dizimi üzerine yapılan enjeksiyonu ve verilen hatayı göreceğiz,bu numerik SQL deyimi iki tırnak ile kapanmış bir sözdizimi değildir.

Şimdi şöyle düşünelim, hedefsite.com üzerinde showproduct.aspx adında bir sayfa olsun.Burada verilen komut id parametresini baz alarak çalışır ve id= parametresinin değerini ekrana yansıtır.

http://www.hedefsite.com/showproduct.aspx?id=2

Şimdi burada id=2 parametresinin değerini şu şekilde değiştirelim:

http://www.victim.com/showproduct.aspx?id=attacker

ve uygulama bize şu şekilde bir hata ile döner:



vet bu hataya göre şöyle söyleyebiliriz;İlk etapta uygulama bunun gibi bir SQL deyimi oluşturur:

SELECT *

FROM productsWHERE idproduct=2

Bu deyime göre 1-: idproduct=2 komutunun değerine göre hareket eder ve buna göre bir sonuç verir.

2-Ancak bu tür id değeri sayısal olan bir sözdizimine sayısal olmayan bir enjeksiyon yapılmaya çalışılıyor,Sql veritabanı sunucusu yukarıdaki örneğin tam tersine şu şekilde saldırgan tarafından değiştiriliyor:

SELECT *

FROM products

WHERE idproduct=attacker

Burada SQL Server eğer değer bir sayı değilse bir KOLON adı olması gerektiğini anlar.Bu durumda da Server tablo adları arasında saldırganın enjekte ettiği attacker adında bir tablo aramaya başlar.Ancak böyle bir kolon adı olmadığından ekrana bir hata mesajı ile yanıt verir.Bu hatada da aramaya çalıştığınız kolon adı bulunamadı demek istiyor zaten.

Veritabanından dönen hatalarda bazı gömülü bilgiler vardır ve bunları elde etmenin bir takım teknikleri mevcuttur.Bunlardan ilki bir kod dizisini sayısal bir değere dönüştürme:

http://www.hedefsite.com/showproduct...bikes%E2%80%99 ory=bikes’ and 1=0/@@version;--



Gördüğünüz gibi ekrana yansıyan hata raporunun içerisinde @@version ile çekmeye çalışdığımız bilgiler mevcut.İşlemimizde biz 0/@@version kod parçacığını enjekte etmeye çalıştık.Bildiğiniz gibi bir bölme işlemi yapılabilmesi için iki sayı olması lazım.

Veritabanı burada bizim enjekte etmeye çalıştığımız kod ile (@@version) fonksiyon içerisinde işlemi dönüştürmeye çalıştı.Ama enjekte ettiğimiz pratikte bölme işlemi hatalı olduğundan sistem fonksiyon içerisindeki sayısal değeri ekrana yansıttı.Yani versiyon bilgisini.

Evet arkadaşlar,veritabanı içerisinde herhangi bir değişkeni görüntülemek için bu tekniği kullanabilirsiniz.Şimdi bir örnekle olayı pekiştirelim.

Örneğimizde Kullanıcı(user) değişkenini görüntüleyelim:

http://www.hedefsite.com/showproduct...bikes%E2%80%99



Veritabanı tarafından gerçekleştirilen bilgilerin de ekrana yansıtılması ile ilgili teknikler vardır.Örneğin: having 1=1 gibi.

http://www.hedefsite.com/showproduct...bikes%E2%80%99




Görüldüğü gibi alınan hatada bize products tablosunda productid adlı bir kolon olduğunu söylüyor.

HAVING yancümlesi bilindiği üzere GROUP BY yancümlesi ile birlikte kullanılır.Ayrıca GROUP BY komutu ile filtrelenen kayıtları süzmek için ise SELECT komutu kullanılır.Bir başka deyişle ’’GROUP BY’’ komutu ’’SELECT’’ komutuna toplu fonksiyonların sonucu ihtiyaç duyar.

Eğer bu komuttaki yukarıda bahsettiğimiz şart sağlanmazsa;veritabanı bu kez bu işlemdeki ilk kolondaki bilgileri ekrana yansıtır.

Bu tekniği kullanarak GROUP BY komutu ile SELECT deyimi içerisinde tüm kolonları numaralandırabilirsiniz:

http://www.hedefsite.com/showproduct...%E2%80%99GROUP BY productid having ’1’=’1



Yukarıdaki örnekte,daha önceden bulduğumuz productid ’nin ne olduğunu GROUP BY komutu ile yukarıdaki hatada öğrenmiş olduk:sonucu ’’name’’ olarak yansıdı ekrana.Şimdi sadece kolon adını yukarıdaki örnekteki gibi ekleyerek devam edelim:

http://www.hedefsite.com/showproduct...bikes%E2%80%99



http://www.hedefsite.com/showproduct...0%99ory=bikes’ and 1=0/name;--



Son olarak web.config dosyasını kullanarak ASP.net uygulamalarında görünen hataları yapılandırabilirsiniz.Bu dosya bir ASP.net uygulamasının ayarlarını ve yapınlandırma işlemlerini tanımalamak için kullanılır.Bu güvenlik yapılandırması yüklü modüller hakkında bilgi içeren (derleme ayarları vb.) bir XML belgesidir.Burada customErrors belirtilen hataların web tarayıcısına nasıl yansıdığını tanımlar.

Bu dosyamızda varsayılan ayar customErrors=’’ON’’ şeklindedir ve bu uzak ziyaretçilere ayrıntılı hataların görüntülenmesini önlemektedir.Aşağıdaki kodu kullanarak bu özelliği devre dışı bırakabilirsiniz ancak bu pek önerebileceğimiz birşey değildir.

<configuration>

<system.web>

<customErrors mode="Off"/>

</system.web>

</configuration>

Bir başka olasılık da sayfa işlemdeyken oluşturulan HTTP hata koduna bağlı olarak farklı sayfaların görüntülenmesi için şu kodu kullanabilirsiniz:

<configuration>

<system.web>

<customErrors defaultRedirect="Error.aspx" mode="On">

<error statusCode="403" redirect="AccessDenied.aspx"/>

<error statusCode="404" redirect="NotFound.aspx"/>

<error statusCode="500" redirect="InternalError.aspx"/>

</customErrors>

</system.web>

</configuration>

Yukarıdaki örnekte uygulama,varsayılan olarak kullanıcıyı Error.aspx sayfasına yönlendirir.Ancak şu üç olguda (HTTP codes 403, 404, and 500) bu sayfa yönlendirmesi yapılabilir.

yertua - ait Kullanıcı Resmi (Avatar)
Forumdan Uzaklaştırıldı
Üyelik tarihi:
01/2013
Mesajlar:
374
Konular:
117
Teşekkür (Etti):
25
Teşekkür (Aldı):
80
Ticaret:
(0) %
26-10-2013 17:51
#2
Bu ne ya yabancı sitelerden alıntı yapıp duruyorsun hiç bir şey anlaşılmıyor kardeşim
S4cuRiTy EneMy - ait Kullanıcı Resmi (Avatar)
Forumdan Uzaklaştırıldı
Üyelik tarihi:
04/2012
Nereden:
root@server
Yaş:
24
Mesajlar:
8.779
Konular:
1513
Teşekkür (Etti):
968
Teşekkür (Aldı):
3105
Ticaret:
(0) %
26-10-2013 18:01
#3
Alıntı:
yertua´isimli üyeden Alıntı Mesajı göster
Bu ne ya yabancı sitelerden alıntı yapıp duruyorsun hiç bir şey anlaşılmıyor kardeşim
Anlatim Türkçe , Resimler İse Oluşan Hata Ayrica Bunlari Paylaştigima Dua Et Oldu Ben Senin Adına Site Hackliyim İstersen Armut Piş Agzima Düş Emek Vermeden Ekmek Olmaz Demişler. Sen Bi Sitede SQL Hatasını Türkçemi Aliyorsun Yoksa İngilizcemi Mantıklı Konuşalim.
Estergon66 - ait Kullanıcı Resmi (Avatar)
E-Mail onayı yapılmamış üye
Üyelik tarihi:
11/2012
Mesajlar:
631
Konular:
47
Teşekkür (Etti):
31
Teşekkür (Aldı):
66
Ticaret:
(0) %
28-10-2013 22:20
#4
güzel anlatım olmuş sağol..

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler