12 Haziran 2020 Cuma

SQL İNJECTİON AÇIKLARI NASIL OLUŞUR ?



        Arkadaşlar hepinize merhabalar bugün biraz sql dilinden bahsedicez ve en önemli açıklardan birindn oluşan SQL İnjection Zaafiyetinden bahsedicez. Biz injection zaafiyetinde web sitesine veya sisteme çeşitli kodlar yedirmeye çalışırız bugünde sql injection zaafiyetleri nasıl oluşuyormuş onu inceliyecez . Öncelikle SQL dilinden biraz bahsedelim.


    SQL Dili:  SQL (Structured Query Language – Yapılandırılırmış Sorgu Dili) kavramı, bir nevi veritabanı yönetimini ifade eder. Burada amaç verileri yönetebilmek ve tasarlayabilmektir. Esasen SQL bir programlama dili olmasa bile pek çok kişi tarafından bu şekilde kabul görür. SQL aracılığıyla sadece veritabanı üstünden işlem gerçekleştirilir. Genel anlamda SQL kurulumu bir hayli zordur ve hatta kurulumu kadar kaldırılması da bir hayli teknik bir konudur.

        Evet SQL dilinin şimdi ne kadar önemli olduğunu anlamışsınızdır diye düşünüyorum. Sizin bir web sitesinin şifreler gibi hatta kredi kartı bilgileri gibi önemli bilgiler bulunduran bir veri tabanına SQL kodları enjekte ederek tüm bilgilerin elde etmeniz sonucunda ortaya çıkan felaketi kimse düşünmek istemez. Aslında "a şirketinin 200.000 kullanıcı bilgileri çalınmış" tarzı haberler sql injection ile birebir ilgilidir. Gelin bu namı değer sql injection açığı nasıl oluşuyormuş onu görelim.
    

    Açıklı SQL Kodu:    


                                 "SELECT first_name, last_name FROM users WHERE user_id = '$id';" 

        Bu SQL kodunu biraz incelediğimizde PHP diliyle senkronize kullanılan bir kod olduğunu anlarız. Tabii bu kod biraz eksik "$id" isimli değişkenin bir input olarak kullanıcıdan alması gerekir. Bu koda göre kullanıcıdan alınan id değerine göre bize veri tabanından kişi bilgilerini çekmekte. Peki o zaman biz burada hiç id değeri bilmediğimizi düşünürsek SQL'deki 'OR' bağlacını kullanarak buradaki kodu şekillendirebiliriz. Hiç bilmediğimiz bir "id" numarasını ekrana gireriz ister böyle bir id olsun ister olmasın ama biz burada OR bağlacını kullanarak yanına yazıcağımız herhangi bir eşitlik veya doğruluk değeri bize tüm veri tabanını çekmemize neden olur. Sisteme girilecek aşağıdaki kod buna örnektir

"SELECT first_name, last_name FROM users WHERE user_id = 5 OR 1=1;"

        Bu kodda gördüğünüz gibi OR bağlacını kullanarak yaptığımız işemde bize ya 5 numaralı idiyi ver ya da 1=1 olan yani tüm kullanıcıları gözümüzün önüne dök dedik. Tabi artık hiç bir şey bu kadar kolay değil çoğu firma bu durumdan ağır zararlar aldığı için  aşağıdaki linkteki koddaki gibi önlemler aldı ve bu tarz açıklara sistemlerinde yer vermemeye başladı.


LİNK: https://github.com/ethicalhack3r/DVWA/blob/master/vulnerabilities/sqli/source/impossible.php

    

        Bugün SQL İnjection zaafiyetinden bahsettik. Sağlıcakla kalmanız dileiğiyle yazımı burada sonlandırıyorum. Görüşmek üzere !


          
Önceki Yazı
Sonraki Yazı

Admin :

2 yorum :