Hoşgeldin Misafir

» WEB | OWASP TOP 10 | SQL INJECTION

Reisci

Reisci

Yerli Ve Milli Hacker
11 Mar 2020
6,569 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
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.

e4kzuje.png



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.

26mlhc5.png


Saldırganımız uygulamayı incelerken otomatik e-posta bildirimi olduğunu keşfediyor ve bu konu üzerine yoğunlaşıyor.

tu1iejk.png


"Unsubscribe” Aboneliği iptal et bağlantısını tıklayarak açılan ekrana

8fwivhj.png


Abonelikten çıkılmak istednen e-posta adresini yazarak ilerliyoruz

i3v0qk6.png


Bir web proxy (ZAP,Burp Suite vb.) kullanarak Submit butonunun HTTP isteğini inceliyoruz

oc5q3yq.png


İçeriği analiz ettiğimizde textbox’a girdiğimiz değerin POST isteğiyle gönderildiği görülüyor.

j5jvw0n.png


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

mdnqqf9.png


Gönderdiğimiz HTTP isteğindeki e-posta değerine ‘ işareti ekleyerek gönderiyoruz

fyy9iw9.png


email değişkenini düzenledikten sonra “forward” diyerek ilerliyoruz.

n5y6hrt.png


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.

o7cr5yh.png


version, kullanıcı adı ve database bilgilerini sorgulatıyoruz.

9blxvsz.png


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.

dpld67f.png


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.

94vf447.png


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..

1xyu7x4.png


gelen e-mail stringi hiçbir filtremeleden geçmeden veritabanına gönderiliyor.

f2e7re4.png


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​