1Forum.Net  

Go Back   1Forum.Net > Bilgisayar, Teknoloji, Güvenlik, Cep Telefonu ve Webmaster & Programlama > Güvenlik
Sosyal Gruplar Oyun Dünyası Yasaklılar Listesi Etiketler Arşiv Rss

Güvenlik Güvenlik ve hacking konusuna merak duyanlar


Yeni Konu aç  Cevapla
 
LinkBack Seçenekler Stil
Alt 17/09/08, 10:25 AM   #1 (permalink)
Forumcu 1üye
 
mrproblem - ait Kullanıcı Resmi (Avatar)
1 Bilgi
Üyelik tarihi: Sep 2008
Nerden: istanbul
Yaş: 27
Mesajlar: 467
Konular: 10
Ruh Halim:
1 Karizma
Rep Gücü : 1
Rep Puanı : 65
Rep Seviyesi : mrproblem will become famous soon enough
Teşekkür Sayısı : 27
Gösterdiği Tepki : 0
0 mesajına 0 kez tepki gösterildi
Exclamation SQL Injection Nedir ?

Konuyu ilk olarak SQL in ne olduğunu açıklamakla başlayabiliriz

SQL Nedir?
SQL (Structured Query Language) veritabanında data çekme, silme ve değiştirme gibi işlemler için kullanılan basit yapılı bir dildir. Hemen hemen tüm web altyapısında veritabanı desteği vardır ve bu web veritabanı ile SQL aracılığıyla anlaşırlar.
Siteye mesaj yazdığınızda bu mesaj veritabanına kaydedilir. Mesaj onaylandığında veritabanındaki bir alan güncellenmiş olur. Yönetici veritabanındaki kaydı silerek mesajın siteden silinmesini sağlar.
Örnek bir kayıt silme SQL cümlesi şu şekilde olabilir;
DELETE FROM members WHERE id=17

Bu kod veritabanı tarafından çalıştırıldığında members tablosunda id alanı 17 olan kayıt silinecektir.
Web uygulamalarında bir çok işlem için kullanıcıdan alınan veri ile dinamik SQLSELECT * FROM Products” örnek SQLSQL cümlecikleri oluşturulurken araya sıkıştırılan herhangi bir meta-karakter SQL Injection’ a neden olabilir. cümlecikleri oluşturulur. Mesela “ cümleciği basit şekilde veritabanından web uygulamasına tüm ürünleri döndürecektir.
Meta-karakter bir program için özel anlamı olan karakterlere verilen isimdir. Örnek olarak C temelli C#, Javascript, PHP gibi dillerde (\) backslash karakteri bir meta-karakterdir. Compiler (derleyici) bu karakteri görünce ondan sonraki karakteri ona göre işler.
SQL’ için kritik metakarakter (‘) tek tırnak’ tır. Çünkü iki tek tırnağın arası string olarak algılanır. Diğer bir önemli meta-karakter ise ( ; ) noktalı virgüldür, satırın bittiğini ve yeni satır başladığını bildirir.
Genel bir web uygulamasında olası bir üye girişi işlemi şu şekildedir;

Formdan gelen kullanıcı adı ve şifre bilgisi ile ilgili SQL cümleciği oluşturulur (
SELECT * FROM members WHERE user=’admin’ AND password=’sifre’ gibi)


SQL cümleciği kayıt döndürüyorsa böyle bir kullanıcının var olduğu anlamına gelir ve oturum açılır ve ilgili kullanıcı üye girişi yapmış olur.


Eğer veritabanından kayıt dönmediyse "kullanıcı bulunamadı" veya "şifre yanlış" gibi bir hata ile ziyaretçi tekrar üye girişi formuna gönderilir.


Şimdi klasik bir örnekle nasıl sql injection nasıl gerçekleşir onu anlatacağım :


ASP ile yazılmış örnek bir üye girişi kodu;
<%
1. FUsername = Request.Form("username")
2. FPassword = Request.Form("password")
3.
4. Set RsLogin = SQLConn.Execute("SELECT * FROM Members WHERE username = '" & FUsername & "' AND Password = '" & FPassword & "'")
5.
6. If RsLogin.EOF AND RsLogin.BOF Then
7. Response.Redirect "/error.asp"
8.
9. Else
10. Session("login") = RsLogin("user_id")
11. Response.Redirect "../"
12.
13. End If
%>



Kod 1. ve 2. satırda “username ve “passwordform değişkenlerinin değerlerini alıyor. 4. satırda SQL cümlesinin içerisine yerleştirip kullanıcı kontrolü yapıyor.
Bundan sonra 6. satırda sonucun boş olup olmadığına bakıyor. Boş ise yani kullanıcı veritabanında bulunmadıysa 7. satırda görüldüğü gibi kullanının karşısına hata sayfasını çıkarıyor.
Eğer bulunduysa 10 ve 11. satırdaki işlemleri yapıyor. Yani kullanıcıya id’ si ile birlikte bir session ( oturum ) açıyor. Bu sayede kullanıcı sisteme giriş yapmış oluyor.
Bu klasik login prosedürüdür. Daha farklı şekilleri de mevcuttur.
Kullanıcı adı ve şifreye bir injection denemesi yapıp neler olacağını inceleyelim. Eğer kullanıcı adı ve şifre yerine “' OR ''='” ve “' OR ''='” girersek başarılı bir şekilde üye giriş yapmış oluyoruz ama nasıl mı?
Şimdi çalışan örnek kodu tekrar hatırlayalım 1 ve 2. satır form değerini alıyordu 4. satırda bu gelen değerleri SQL’ in içerisine yerleştirip veritabanında sorgu yaptırtıyordu.
Değerleri yerlerine yerleştirip ve az önceki çalışan SQL’ e bakalım;
SELECT * FROM Members WHERE username = '' OR ''='' AND Password = '' OR ''=''
Farkettiğiniz üzere bu SQL sorgusu her zaman doğru dönecek ve “Members” tablosundaki tüm üyeleri getirecektir. Bu SQL cümleciğini tercüme edersek şu şekilde olacaktır. Members tablosundan username boş olanları ve password ü boş olanları getir ya da boş eşittir boş!
Birinci ve ikinci mantıksal kontrolün kayıt döndürüp döndürmesi önemli değil çünkü üçüncü kontrol her zaman doğru olarak döneceğinden (boş her zamana boşa eşit ) bu SQL cümleciği her zaman tüm kayıtları döndürecektir. Yani kayıt boş mu dolu mu diye kontrol ettiğimizde kayıt dolu olarak gözükecektir. OR kullandık dolayıyla sorguların herhangi biri doğru (true) olarak dönerse tüm kayıtlar dönmüş oluyor.
Bu SQL Injection' ı yaptığımızda dönen kayıtlardaki ilk kullanıcı olarak giriş yapılmış olacaktır. İlk kullanıcı da genelde admindir. Yani siteye admin girişi apmış olursunuz.
SQLInjection; SQL cümleciklerinin arasına dışarıdan girdi yaparak SQL’ i istediğiniz şekilde manipüle etmenize izin veriyor.
SQL Injection veritabanından ve dilden bağımsız olarak her türlü uygulama-veritabanı ilişkisine sahip sistemde bulunabilir ve bu veritabanlarının bir açığı değildir. SQL Injection’ dan korunmak web geliştiricilerine kalmıştır.



_______________________
Üye olup ailemize katılmak ve reklamsız bir forumdan yararlanmak isterseniz TIKLAYIN
mrproblem isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Yeni Konu aç  Cevapla

Sosyal Paylaşım Kısayolları

Etiketler
güvenlik, injection, kod, nedir, sql


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 
Seçenekler
-------------------------------------------------------------
Stil


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
SQL Server Yedekleme (Backup) İşlemi RapeLLa Webmaster & Programlama 2 22/08/08 15:33 PM
SQL Server'da Veritabanı Fonksiyonları DangerouS_GirL Webmaster & Programlama 0 14/04/08 12:51 PM
SQL dılını kullanarak RapeLLa Webmaster & Programlama 0 12/03/07 23:33 PM
Aktiviteleri İzlemek - RapeLLa Webmaster & Programlama 1 12/03/07 23:28 PM
SQL Server Hakkında genel Bilgiler RapeLLa Webmaster & Programlama 14 12/03/07 17:46 PM

Tüm Zamanlar GMT +2 Olarak Ayarlanmış. Şuanki Zaman: 17:36 PM.

Powered by vBulletin® Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2008, Crawlability, Inc.

Sitemiz bir forum sitesi olduğu için kullanıcılar her türlü görüşlerini önceden onay olmadan anında siteye yazabilmektedir,
bu yazılardan dolayı doğabilecek her türlü sorumluluk yazan kullanıcılara aittir,
yine de sitemizde yasalara aykırı unsurlar bulursanız buradan bize bildirebilirsiniz, şikayetiniz incelendikten sonra en kısa sürede gereken yapılacaktır.
Report Abuse, Harassment, Scamming, Hacking, Warez, Crack, Divx, Mp3 or any Illegal Activity to here

Reklam vermek için bize buradan ulaşabilirsiniz.

web statistics
Hepsi
3 4 5 9 11 12 13 14 15 18 22 24 25 27 28 29 30 31 33 34 35 36 38 39 40 42 43 44 45 46 51 52 54 55 57 59 61 62 68 69 70 71 75 76 81 82 88 91 95 96 99 100 101 104 109 120 121 128 131 132 135 136 139 142 147 150 151 152 153 154 155 156 157 158 159 160 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 251 252 253 254 255 259 277 279 280 281 282 283 285 286 287 288 289 290 291 292 293 295 296 303 304 306 307 308 309 310 311 312 313 314 319 321 322 323 325 327 328 329 330 331 332 334 338 340 341 342 343 344 345 346 347 348 349 351 355 358 359 360 362 364 365 366 367 371 377 378 379 380 381 382 383 384 385 387 411 412 417 419 420 421 422 423 426 432 434 439 440 441 442 444 449 466 469 470 471 472 473 474 475 476 477 478 479 481 482 483 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 505 518 519 520 521 523 524 526 533 537 539 541 545 546 548 549 550 551 552 555 556 557 558 559 560 561 562 563 565 566 569 571 574 580 581 582 583 584 585 586 589 590 591 593 595 596 597 598 599 600 601 604 605