Cross Site Scripting(XSS) açığı güvenli web geliştirme aşamalarına dikkat edilmediğinde, Websitesi üzerindeki veri giriş alanlarının sömürülerek
istenen kod parçacıklarının(payload) enjekte edilmesi durumudur. Bu yazı serisinde Reflected ve Stored XSS zaafiyetlerini açıklamaya çalışacağım.
Bunların ne olduğunu kısaca açıklayayım.
Stored XSS:
Stored, Saklamak kelimesinden de anlaşılacağı üzere enjekte edilen payloadlar hedef sunucu(veritabanı vb.) üzerinde barındırılır. En tehlikeli XSS
açığı diyebiliriz. Reflected XSS açığında saldırının türüne göre deneyimli bir kişinin URL üzerinden saldırıyı fark etmesi mümkün olabilirken
Stored XSS açığında bu mümkün değildir.
Reflected XSS:
veri giriş alanlarına(kayıt formu,arama kutusu vb.) enjekte edilen payloadın web sunucu üzerinde yürütülmesidir. E-postalarda ve URL’ler üzerinden
hedefe yönlendirilir. Browser tarafından güvenli bağlantı olarak algılanan komut yürütülür.
XSS açığına çalışmak için temel düzeyde Javascript bilmek konuyu anlamak ve payloadlar üzerinde oynama yapmak için yeterli olacaktır. OWASP
TOP 10 serisinde tüm konular application.security üzerinde simüle edilerek kurgulanacaktır.
SourceYard isimli bir online kod depolama uygulamasında XSS açığı arayacağız.
Bob isimli saldırganız bir test hesabı açarak uygulamaya giriş yapıyor.
Uygulamaya giriş yaptıktan sonra “Issues” başlığının altından açılan arama çubuğunu test edelim.
Arama çubuğunun nasıl çalıştığını anlamak için herhangi bir kelime aratalım. Uygulama “xxx” aratmamızı istiyor.
Görüldüğü üzere websitesi bize “xxx” sorgusunu geri dönderdi.Eğer websitesi üzerinden alınan girdiler filtrelenmiyorsa “xxx” yerine sunucu üzerinde
çalışabilecek JavaScript kodları gönderebiliriz.
Bunu denemek için XSS payloadı gönderiyoruz.
Gördüğünüz gibi “hacked” uyarısını bize dönderdi. Websitesinde herhangi bir filtremele olmadığı için XSS açığı gerçekleşiyor.
Saldırganımız bu açığı sömürmek için SourceYard isimli uygulamanın arayüzünü kopyalıyarak src-yard.com domainiyle klonluyor.Bir yönlendirme
kodu hazırlıyor ve bilgilerini almak istediği kişiye e-posta olarak gönderiyor.
Oluşturduğumuz klon sitenin sunucusunda
service apache2 start && tail -f /var/log/access.log // apache servisini başlatıyor ve “tail” komutuyla access.log dosyasınının son girişlerini okuyor
“-f” parametresi dosyayı anlık olarak izlemeye yarıyor.
Fake sitemiz üzerindeki bilgi girişini izlemeye başlıyoruz ve e-posta üzerinden gönderdiğimiz bağlantı ile bilgi girişi olduğunda bunu yakalayabileceğiz.
Gördüğünüz gibi kurban gönderdiğimiz e-postayı açtığında böyle bir şeyle karşılaşacak. Detaylı incelerseniz linkin sonunda yaptığımız yönlendirme
gözüküyor. Deneyimli birisi bunu farkedebilir.
Linke tıklatığımızda oluşturduğumuz klon site açıldı. Kurban kullanıcı adı ve şifresini girerek giriş yaptığında
Gördüğünüz gibi “Console” ekranına HTTP/GET isteğiyle gönderilen username ve pass bilgileri düştü.Kullanıcının bilgilerini elde etmiş olduk.
Her ne kadar bir website üzerinde güvenlik açığı bulmak önemli olsada bunun nasıl oluştuğunu ve nasıl fixlenebileceğini bilmemiz gerekiyor.Arama
sayfasının kaynak kodlarını incelediğimizde
işaretlenmiş olan 1.blokta searchParameter değeriyle kullanıcıdan alınan verinin 2. blokta hiçbir filtreleme yapılmadan ekrana basıldığını görüyoruz.
Buda bize istediğimiz JS kodlarını çalıştırmamıza olanak sağlıyor.Fixlenmiş kaynak kodları inceleyelim.
Gördüğünüz gibi JSTL kütüphanesindeki
Platform üzerindeki anlatım bu kadar XSS üzerinde çalışma yapmak isteyenler https://www.vulnhub.com/entry/owasp-broken-web-applications-project-12,46/ üzerinde
sanal makinayı indirerek OWASP TOP 10 zaafiyetleri üzerinde pratik yapabilir.