SQL Injection - Yeni Başlayanlar için Giriş!

  • Konbuyu başlatan Konbuyu başlatan Hüseyin
  • Başlangıç tarihi Başlangıç tarihi

Hüseyin

Üye
Top Poster Of Month
Katılım
21 Ocak 2024
Mesajlar
164
Tepkime puanı
36
Puanları
28
sql.JPG


Bu yazıda SQL enjeksiyonunun ne olduğunu ve hacker'ın ne yaptığını öğreneceksiniz. Okuduğunuz makaleler veritabanlarında saklanır ve siz internette bulduğunuz bir bağlantıya tıkladıktan sonra size gösterilir. Bu basit “tıklama” aslında verilerin cihazınızın ekranında görüntülenmesini talep eder. Ancak bunu gerçekleştirmek için ziyaret ettiğiniz web sitesinin veritabanında saniyenin kesirleri kadar sürede sorgular yapılır. Sizin site sorgunuz iyi huyluyken başkasınınki kötü niyetli mi? Bu nasıl yapılabilir?

Öyleyse başlayalım!

Veritabanı nedir?​

Peki veritabanı nedir? Basitçe söylemek gerekirse, veritabanları, her tablonun verileri tanımlayan bir dizi satır ve verileri içeren sütunlar içerdiği bir tablo yapısıdır.

Bir örneğe bakalım.

sql.png


Bu tablomuzun adı 'UserData'. 3 satır veri içerir. Birincisi “ID”, ikincisi “ Username” ve üçüncüsü “Password”. Bu şekilde kullanıcılarımız hakkında bazı verileri depoladık.Buradaki her sütun, bir değere (bu durumda bir kullanıcıya) özgü bir grup veri içerir.Örneğin, bu tablodaki ilk sütun 'PwnLabMe' kullanıcısına, ikincisi 'unicorn' kullanıcısına ait verileri içerir ve bu böyle devam eder.Yani CyberMask'in şifresini öğrenmek isteseydim, kullanıcının “PwnLabMe” olduğu sütuna karşılık gelen “şifre” satırını arardım.Yani isimleri şifrelere eşlemek için bir veritabanı ama SQL'in bununla ne ilgisi var?

SQL nedir ve nasıl çalışır?​

SQL'in açılımı Structured-Query-Language 'dir ve es-q-el şeklinde telaffuz edildiğini duyabilirsiniz. Veritabanı yönetimi için yaygın olarak kullanılan bir dildir.

Diyelim ki veritabanımda bir milyon kullanıcı var ve belirli bir kullanıcının kimliğini bulmak istiyorum, şimdi elle arama yapmak anlamsız olurdu. Öyle değil mi?

SQL kullanarak, veritabanına PwnLabMe'nin kimliğini seçmesini ve çıktıda yazdırmasını söyleyebilirim.

SQL'in tanımı ve sözdizimi​

Örnek olarak bir kod parçacığını ele alalım:

SELECT ID FROM UserData WHERE Username='PwnLabMe';

Buna sorgu denir. Sorgular basitçe çalıştırdığınız kod parçalarıdır.

Veritabanı motoru aracılığıyla veritabanına verilen talimatlar olarak her sorgunun ayrı ayrı ve bağımsız olarak yürütüldüğü diğer dillerden farklıdırlar.

Veritabanımızda tam olarak ne söyledik:

  • SELECT, veritabanına bir veya daha fazla değer seçmesini söyler.
  • ID, seçeceğiniz SELECT değeridir.
  • FROM veritabanına hangi tabloyu kullanacağını söyler, bu durumda UserData.
  • WHERE burada bir koşuldur, sadece veritabanına sadece ID where ID where seçmesini söyler.
  • certainValue kullanıcı adı satırının PwnLabMe değerine sahip olduğu sütundaki şifreyi istiyoruz.
Şimdi veri almak için SQL' in temel bir kullanımını ele aldığımıza göre, daha ileri gidelim ve web sitelerinin bunu nasıl kullandığını açıklayalım!

SQL'i diğer programlama dillerine entegre etme​

Veritabanından nasıl veri çekileceğini gördükten sonra bunun web siteleri ve diğer siber uzay varlıkları ile ilişkisi nedir?

Cevap basit, SQL PHP ve C# gibi diğer dillere gömülebilir

Örneğin PHP'yi ele alalım (PHP web uygulamaları için bir programlama dilidir).

$r2 = $mysqli->query("SELECT ID FROM `UserData` WHERE ID=‘PwnLabMe’);

Eğer syntax'ın benzer olduğunu görüyorsanız.

SQL'in diğer dillere nasıl entegre olduğu çok basittir, çünkü çoğunlukla Sorgu syntax neredeyse her zaman aynıdır!

Bu tam olarak ne anlama geliyor? Bu, veritabanı kullanan her web sitesinin muhtemelen SQL kullandığı anlamına gelir, çünkü SQL veritabanı yönetiminin önemli bir parçasıdır.

SQL kendine özgü yollarla güçlü bir dildir. Basitliğine rağmen çok geniş bir ölçekte kullanılmaktadır. Kendi başına kullanılabildiği gibi diğer programlama dillerine de entegre edilebilir. Veritabanı üzerinde bir bütün olarak ayrı ayrı çalıştığı için çoğu programlama diline kıyasla farklı davranır.

Şimdi SQL'in ne olduğunu biliyoruz. Bunun kötü niyetli bilgisayar korsanlığı ile nasıl bir ilişkisi var? Hadi öğrenelim!

SQL enjeksiyonu nedir?​

SQL Enjeksiyonu tam olarak adından da anlaşılacağı gibi bir SQL enjeksiyonudur. Elbette, kulağa ne kadar basit gelse de, aslında o kadar basit değildir.

Yaptığınız şey, halihazırda var olan bir “sorguya” kötü amaçlı kod enjekte etmektir ve nihai amaç, veritabanı aracılığıyla yürütülmeden önce talimatlar kümesini manipüle edebilmektir.

SQL Enjeksiyonu, veritabanını çalıştıran işletim sistemi üzerinde size tam kontrol sağlayabilecek en iyi tekniktir

SQL enjeksiyonu nasıl çalışır?​

Örnek olarak bu form formatını ele alalım:

sqllogin.jpg


Form aşağıdaki sorguyu çalıştırır:

SELECT Password FROM `UserData` WHERE UserName='PwnLabMe';

Metin kutusu php kodunda (yukarıdaki resim) $username adında bir değişken verdim, böylece metin kutusuna ne yazarsam sorgu içinde $username konumuna yerleştirilecek.

Varsayılan olarak, $username = bu metin kutusuna ne yazarsam yazayım koşulu geçerlidir.

Yani, teorik olarak, bu metin kutusuna bir sorgu yazarsam, çalışması gerekir. Dolayısıyla, “ injection” terimi de buradan gelmektedir.

Elbette bir SELECT sorgusundan daha fazlasını yazmak isterdim, ancak bunu ileride göreceğiz!


SQL en yaygın veritabanı yönetim dilidir. Her komutun (Sorgu) veritabanı üzerinden gerçek zamanlı olarak ayrı ayrı yürütüldüğü, sorgu yapan talimatlar şeklinde basit bir dildir.
  • SQL diğer programlama dillerine entegre edilebilir.
  • SQL Enjeksiyonu, mevcut bir sorguya kötü amaçlı kod “enjekte etme” eylemidir.
  • SQL Enjeksiyonu, (kişisel) verileri toplamak / işletim sisteminde kötü amaçlı kod çalıştırmak veya hatta veritabanına “zarar” vermek için kullanılır.
 
Geri
Üst