Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

9-Sql Injection

9-Sql Injection

  • Login to see the comments

9-Sql Injection

  1. 1. SQL Injection SQL Injection Nedir?: SQL Injection saldırısı web uygulamasında veritabanı ile ilişki içerisinde olan yerlerde aranan bir zaafiyet türüdür. Bilindiği gibi SQL dili, web uygulamasının veritabanından veri çekmek için kullandığı ara dildir. Normal sorgularda geliştiricinin istediği gibi çalışacaktır. Örneğin elinizde bir öğrenci tablosu var ve bu tabloda öğrenci no,ad,soyad ve telno gibi değerler bulunuyor. Web sitesindeki input alanlarına bir isim ve soyisim girmeniz isteniyor. Eğer varsa telefon numarası geliyor, kayıt yoksada bulunamadı mesajı veriliyor olsun. Bunun içinde aşağıdaki sorgu çalıştırılıyor olsun. Select Telno from OgrenciTablosu where Ad='TextBox1.Text' AND Soyad='TextBox2.Text'; Göründüğü gibi kullanıcıdan alınan veri hiçbir kontrolden geçirilmeden direk SQL sorgusuna eklenip çalıştırılıyor. Böyle bir durumda hacker input a farklı veriler girdiğinde SQL sorgusuna müdahale edebilecektir. Örneğin hacker, input alanına aşağıdaki veriyi girdiğinde ne olacağına bakalım. 1. Input: Mustafa' or 1=1 -- 2. Input:Darboğaz Select Telno from OgrenciTablosu where Ad='Mustafa' or 1=1 --' AND Soyad='Darboğaz'; SQL sorgusunun karşılığı olarak adı Mustafa olanları ya da 1=1 eşit ise Telefon numarasını getir. Tabloda Mustafa diye biri olmasa bile 1, 1 e eşit olduğundan true döndürecek ve sorguyu çalıştıracaktır. Burada ikinci kısım önemli değildir çünkü ilk kısımdaki -- karakterleri bundan sonrasını yorum olarak algıla demektedir. Yani SQL sorgusu çalıştığında -- kısmına kadar çalışacaktır. Gerisini görmeyecektir. Böylelikle hacker tablodaki bütün kayıtları görecektir. Eğer istenirse SELECT sorgusunun dışına çıkıp diğer sorgularda(Update,Delete,Drop,Insert...) çalıştırılabilir.
  2. 2. SQL Injection Saldırı Karakterleri: ' ya da '' :String göstergesi -- ya da # :Tek satırlık yorum satırı /*...*/ :Çok satırlık yorum satırı + :İlave kod eklemek için || :İlave kod eklemek için ?Param1=a&Param2=b :URL paremetreleri PRINT: Çalışmayacak komut parçası @variable:Değişken @@variable:Evrensel değişken waitfor delay '0:0:10': Zaman beklemesi @@version: SQL sunucusunun versiyonunu göstermek Blind SQL Injection: Blind SQLi saldırılarında sayfa hiçbir şekilde hata mesajı göstermez. Sayfadaki verilerin değişmesinden ya da hiç gelmemesinden anlaşılır. Oldukça zahmetli olabilir fakat genelde bu zahmete değer. Örnekle açıklamak gerekirse http://www.site.com/konu.php?id=25 and 1=1 isteği true değeri döndürüyorken http://www.site.com/konu.php?id=25 and 1=2 isteği false değeri döndürüyorsa burada blind sql injectiondan bahsedebiliriz. Daha sonra tamper data ile false ve true dönen sonuçların zamanlarına bakarız. Ve istersek zaman bazlı sql injection saldırısı deneyebiliriz. Blind SQLi varlığını doğruladıktan sonra veritabanın versiyonunu,tablo isimlerini,sutün isimlerini öğrenebilir ve daha sonrasında trojan yükleterek sistemi ele geçirebiliriz. http://www.site.com/konu.php?id=25 and substring(version(),1,1)=4 sorgusunu çalıştırdığımızda true dönüyor ise veritabanının versiyonu 4 demektir. Otomatize Araçlarına Sqlmap ve havij örnek gösterilebilir.
  3. 3. IDS Atlatmak: Hex Encoding: Yazacağınız sql kodlarını HEX koduna çevirerek yollayabilirsiniz. Böylelikle karşı tarafta belli karakterleri arayan IDS sistemlerini atlatmış olacaksınız. Satır içi Yorum Alanları Kullanmak:Yorum satırları ile IDS sistemleri atlatabilir daha sonra SQL serverda çalışacak şekilde ayarlayabilirsiniz. Örneğin UNION/**/SELECT/**/'/**/OR/**/1/**/=/**/1 Char Encoding: Char() fonksiyonunu kullanarak IDS sistemlerini atlatabilirsiniz. Örneğin: ' or kullaniciadi like char(37); ' union select 1,(load_file(char(47,101,116,99,47,112,97,115,115,119,100))),1,1,1; Bu komut ile IDS sistemini atlatarak veritabanına dosya yükleyebilirsiniz. Parçalama Kullanmak: Karşı taraftaki IDS sistemi DELETE kelimesini arıyor ve bulduğunda siliyor ise ona '; EXECUTE CONCAT('DE','LE','TE') sorgusunu yollabilirsiniz. Böylelikle DELETE kelimesi ile karşılaştırıldığında true dönmeyecektir. Obfuscated Kullanmak: Obfuscated bildiğiniz gibi karmaşıklaştırmak için kullanılır. Örneğin veritabanına qwerty kelimesini göndermek istiyorsunuz fakat IDS sistemi bunu engelliyor. Şu şekilde gönderebilirsiniz. Reverse(concat(if(1,char(121),2),0x74,right(left(0x567210,2),1), lower(mid('TEST',2,1)),replace(0x7074, 'pt','w'),char(instr(123321,33)+110))) Concat(unhex(left(crc32(31337),3)-400), unhex(ceil(atan(1)*100-2)),unhex(round(log(2)*100)- 4), char(114),char(right(cot(31337),2)+54, char(pow(11,2))) SQL Injection Saldırılarından Nasıl korunulur?: 1-Gelen bütün verileri whitelistden geçirin. 2-Veritabanı işlemlerini yapacağınız kullanıcıya minimum yetkiyi verin. Örneğin Sadece Select yetkisi verirseni WAF ı atlatsa bile SQL sunucunuz buna izin vermeyecektir. 3-Veritabanı trafiğinizi IDS,WAP ile monitörleyin. 4-Veritabanı işletim sistemine erişemesin.(Cmd çalıştırmak gibi) 5-MSSQL veritabanlarında stored procedure kullanın.

×