OWASP TOP 10 | SQL INJECTION
SQL(Structured Query Language), veritabanı bulunan sistemlere veri ekleme,silme ve değiştirme komutunu gönderen bir sorgu dilidir.
Güvenli uygulama geliştirme aşamalarına dikkat edilmediğinde uygulama üzerinden gönderilen SQL sorgularının veritabanında yetkisiz
çalıştırılmasına “SQL Injection “ saldırısı denir. SQL açığı bulunan sistemlerde saldırgan; kimlik değiştirme(spoofing),mevcut verileri de-
ğiştirme,bozma,ekleme(bakiyelerin değiştirilmesi vb.),administrator(yönetici) yetkisine yükselme yapabilir. Owasp TOP 10 zaafiyetlerini
anlatırken güvenlik açıklarını daha iyi simüle edebilmek için application.security plaformu üzerindeki örneklerle anlatmaya çalışacağım.
yukarı gördüğünüz gibi bizim için bir kurgu oluşturulmuş ve adım adım penetrasyon testi aşamalarını göreceğiz. CarVibe adlı araç paylaşım uygula-
masına penetrasyon testi gerçekleştirme işi Bob isimli kişiye veriliyor.
Saldırganımız uygulamayı incelerken otomatik e-posta bildirimi olduğunu keşfediyor ve bu konu üzerine yoğunlaşıyor.
"Unsubscribe” Aboneliği iptal et bağlantısını tıklayarak açılan ekrana
Abonelikten çıkılmak istednen e-posta adresini yazarak ilerliyoruz
Bir web proxy (ZAP,Burp Suite vb.) kullanarak Submit butonunun HTTP isteğini inceliyoruz
İçeriği analiz ettiğimizde textbox’a girdiğimiz değerin POST isteğiyle gönderildiği görülüyor.
E-posta bildirimlerini kapatmak için kullanılan unsubscribeUser methodunun kodlarını bize gösteriyor. Kodları tek parça göstermek için ben düzenledim
Gönderdiğimiz HTTP isteğindeki e-posta değerine ‘ işareti ekleyerek gönderiyoruz
email değişkenini düzenledikten sonra “forward” diyerek ilerliyoruz.
HTTP yanıtında SQL syntax hatası aldığımızı görüyorsunuz. Bu gönderdiğimiz eposta değişkenin yanında istediğimiz SQL sorgularını ekleyerek
çalıştırabileceğimiz anlamına geliyor. Şuan bir SQL injection açığı bulmuş oluyoruz.
Simülasyonun adımlarını ilerlettiğimizde SQL sorgularını nasıl gönderebileceğimizi gösteriyor.
version, kullanıcı adı ve database bilgilerini sorgulatıyoruz.
gördüğünüz gibi bize dönderdiği JSON da sorgulattığımız bilgilerde mevcut.Adımları takip ederek veritabanındaki tabloları sorgulayalım.
gördüğünüz gibi yukarıda sorguyu yürüttüğümüzde “carvibe_subscribers” adlı bir tablo olduğunu bize döndürüyor.
Tabloyu sorgulattığımızda e-posta bildirimleri açık olan kullanılara ait bilgileri veriyor.Gördüğünüz gibi bir SQL’injection saldırısının nasıl yapıldığını simüle ettik.
Zaafiyetleri bulmak ne kadar önemli olsada bunu neden oluştuğunu ve nasıl düzeltileceğini bilmekte o denli önemli gelin kaynak kodları tekrardan inceleyelim..
gelen e-mail stringi hiçbir filtremeleden geçmeden veritabanına gönderiliyor.
gördüğünüz gibi fixlenmiş kodlarda gönderilen SQL sorgunsunun direk email stringi verilerek değil symbol ile gönderilmiş, burada PreparedStatement
özelliği kullanılarak “?” değerinin SetString ile email olduğu belirtilmiş(setString metodu özel SQL sorgularını otomatik olarak geçersiz kılar) Yukarıda
anlatılanlar giriş seviyesinde ve simülasyon üzerinde gerçekleştirilmiştir.Kendi localinizde https://www.vulnhub.com/entry/owasp-broken-web-applications-project-12,46/
adlı makineyi yükleyerek sql injection saldırıları üzerine pratik yapabilirsiniz.
SQL’in sözdizimini öğrenmek için https://www.w3schools.com/sql/default.asp adresinden bakabilirsiniz
SQL(Structured Query Language), veritabanı bulunan sistemlere veri ekleme,silme ve değiştirme komutunu gönderen bir sorgu dilidir.
Güvenli uygulama geliştirme aşamalarına dikkat edilmediğinde uygulama üzerinden gönderilen SQL sorgularının veritabanında yetkisiz
çalıştırılmasına “SQL Injection “ saldırısı denir. SQL açığı bulunan sistemlerde saldırgan; kimlik değiştirme(spoofing),mevcut verileri de-
ğiştirme,bozma,ekleme(bakiyelerin değiştirilmesi vb.),administrator(yönetici) yetkisine yükselme yapabilir. Owasp TOP 10 zaafiyetlerini
anlatırken güvenlik açıklarını daha iyi simüle edebilmek için application.security plaformu üzerindeki örneklerle anlatmaya çalışacağım.
yukarı gördüğünüz gibi bizim için bir kurgu oluşturulmuş ve adım adım penetrasyon testi aşamalarını göreceğiz. CarVibe adlı araç paylaşım uygula-
masına penetrasyon testi gerçekleştirme işi Bob isimli kişiye veriliyor.
Saldırganımız uygulamayı incelerken otomatik e-posta bildirimi olduğunu keşfediyor ve bu konu üzerine yoğunlaşıyor.
"Unsubscribe” Aboneliği iptal et bağlantısını tıklayarak açılan ekrana
Abonelikten çıkılmak istednen e-posta adresini yazarak ilerliyoruz
Bir web proxy (ZAP,Burp Suite vb.) kullanarak Submit butonunun HTTP isteğini inceliyoruz
İçeriği analiz ettiğimizde textbox’a girdiğimiz değerin POST isteğiyle gönderildiği görülüyor.
E-posta bildirimlerini kapatmak için kullanılan unsubscribeUser methodunun kodlarını bize gösteriyor. Kodları tek parça göstermek için ben düzenledim
Gönderdiğimiz HTTP isteğindeki e-posta değerine ‘ işareti ekleyerek gönderiyoruz
email değişkenini düzenledikten sonra “forward” diyerek ilerliyoruz.
HTTP yanıtında SQL syntax hatası aldığımızı görüyorsunuz. Bu gönderdiğimiz eposta değişkenin yanında istediğimiz SQL sorgularını ekleyerek
çalıştırabileceğimiz anlamına geliyor. Şuan bir SQL injection açığı bulmuş oluyoruz.
Simülasyonun adımlarını ilerlettiğimizde SQL sorgularını nasıl gönderebileceğimizi gösteriyor.
version, kullanıcı adı ve database bilgilerini sorgulatıyoruz.
gördüğünüz gibi bize dönderdiği JSON da sorgulattığımız bilgilerde mevcut.Adımları takip ederek veritabanındaki tabloları sorgulayalım.
gördüğünüz gibi yukarıda sorguyu yürüttüğümüzde “carvibe_subscribers” adlı bir tablo olduğunu bize döndürüyor.
Tabloyu sorgulattığımızda e-posta bildirimleri açık olan kullanılara ait bilgileri veriyor.Gördüğünüz gibi bir SQL’injection saldırısının nasıl yapıldığını simüle ettik.
Zaafiyetleri bulmak ne kadar önemli olsada bunu neden oluştuğunu ve nasıl düzeltileceğini bilmekte o denli önemli gelin kaynak kodları tekrardan inceleyelim..
gelen e-mail stringi hiçbir filtremeleden geçmeden veritabanına gönderiliyor.
gördüğünüz gibi fixlenmiş kodlarda gönderilen SQL sorgunsunun direk email stringi verilerek değil symbol ile gönderilmiş, burada PreparedStatement
özelliği kullanılarak “?” değerinin SetString ile email olduğu belirtilmiş(setString metodu özel SQL sorgularını otomatik olarak geçersiz kılar) Yukarıda
anlatılanlar giriş seviyesinde ve simülasyon üzerinde gerçekleştirilmiştir.Kendi localinizde https://www.vulnhub.com/entry/owasp-broken-web-applications-project-12,46/
adlı makineyi yükleyerek sql injection saldırıları üzerine pratik yapabilirsiniz.
SQL’in sözdizimini öğrenmek için https://www.w3schools.com/sql/default.asp adresinden bakabilirsiniz