DEV Community

Cover image for SQL Injection Nedir?
Berkay-Şen for YUSIBER

Posted on

SQL Injection Nedir?

SQL injection nedir demeden önce SQL Nedir buna bakalım

SQL Nedir?
SQL Bir sorgulama dilidir. İlişkisel veritabanları ile etkileşime girmek için geliştirilmiştir.Veritabanındaki verilerde değiştirme,silme ekleme gibi bir çok etkileşimi SQL komutları ile yapabiliriz.MSSQL , MYSQL gibi veritabanı türleri SQL sorgu dilini kullanılır.

Örnek Bir SQL Sorgusu

SELECT * FROM Users where Username='Berkay' and Password='123456'
Enter fullscreen mode Exit fullscreen mode

Bu SQL sorgusu veritabanındaki Users tablosundan kullanıcı adı “Berkay” ve şifresi “123456” olan kullanıcıların tüm bilgilerini getirir.

Biz bir sisteme login olurken de buna benzer komutlar arkaplanda çalışıyordur.Login olduğumuz formda ya da URL üzerinden bu arkaplanda çalışan sorguya müdahale edebiliriz.Tabii böyle bir açık programcı tarafından kapatılmadıysa/önlenmediyse.

Şimdi SQL injectionu anlatalım.

SQL injection saldırıları normal sql sorgularına müdahale edip kendi istediğimiz SQL kodlarını sisteme enjekte edip çalıştırmamızı sağlayan güvenlik açıklarıdır.

SQL injection güvenlik açığı sayesinde saldırganlar;

  1. Web sitesindeki kullanıcı bilgileri çalınabilir
  2. Veritabanındaki veriler değiştirilebilir
  3. Veritabanı silinebilir ...

Normal bir senaryoda giriş yaptığımız sistemde kullanıcı adı ve parola yerimiz vardır. Buradaki inputlara girdiğimiz veriler aşağıda tırnaklar arasına verdiğimiz kısımlara gelmektedir

SELECT * FROM Users where Username='KULLANICIADI' and Password='PAROLA'
Enter fullscreen mode Exit fullscreen mode

Image description

Görüldüğü üzere kullanıcı adı kısmına brktrl yazdım.Şifre kısmına da 123456789deneme yazdım.Arkaplanda bu nasıl bir sorgu yaratıyor hemen bakalım.

SELECT * FROM Users where Username='brktrl' and Password='123456789deneme'
Enter fullscreen mode Exit fullscreen mode

Buraya kadar her şey normal.Ancak ben kullanıcı adı inputunun yerine şu kodu yazsam ve şifre input yerini de boş bıraksam ne olurdu sizce?

'--
Enter fullscreen mode Exit fullscreen mode

Eğer şifre kısmına bunu yazsaydım ne olacaktı hemen bakalım.

SELECT * FROM Users where Username='brktrl'--' and Password='123456789deneme'

Enter fullscreen mode Exit fullscreen mode

Çift tire kullandığımızda bu SQL’de yorum satırı anlamına gelir.Yani bizim yazdığımız tek tırnaktan sonra kalan kısım yorum satırıdır. Bu yüzden arka tarafta şu kod çalıştırılmış gibi olacaktır.

SELECT * FROM Users where Username='brktrl'
Enter fullscreen mode Exit fullscreen mode

Kalan kısım yorum satırı olduğu için çalıştırılmayacaktır.Bu yüzden yazmadım. Gördüğünüz gibi arkaplanda çalışan komut sadece kullanıcı ismini yazarak bu hesaba giriş yapmamızı sağlıyor.İşte SQL Injection bu ve bunun gibi işlemlere denir.

Programcının alabileceği bazı önlemlere göre stratejimizi değiştirebiliriz.Yukarıda anlattıklarım işe yaramazsa daha farklı denemeler payloadlar kullanabilirsiniz.

Açık olduğunu düşündüğünüz sitenin linkini “sqlmap” aracına vererek de veritabanına sızabilirsiniz.

Discussion (0)