1. XSS Nedir?
Siteler arası komut dosyası çalıştırma (XSS), bir saldırganın, kullanıcıların savunmasız bir uygulamayla olan etkileşimlerini tehlikeye atmasına olanak tanıyan bir web güvenlik açığıdır. Bir saldırganın, farklı web sitelerini birbirinden ayırmak için tasarlanmış aynı kaynak politikasını atlatmasına olanak tanır. Siteler arası komut dosyası çalıştırma güvenlik açıkları normalde bir saldırganın kurban kullanıcı gibi görünmesine, kullanıcının gerçekleştirebileceği tüm eylemleri gerçekleştirmesine ve kullanıcının herhangi bir verisine erişmesine olanak tanır. Kurban kullanıcı uygulama içinde ayrıcalıklı erişime sahipse, saldırgan uygulamanın tüm işlevleri ve verileri üzerinde tam kontrol sahibi olabilir.
XSS açığı, XSS‘e karşı savunmasız olan bir web sitesini, kullanıcılara kötü amaçlı JavaScript döndürmesi için manipüle edilerek çalışır. Kötü amaçlı kod bir kurbanın tarayıcısında çalıştığında, saldırgan uygulama ile etkileşimini tamamen tehlikeye atabilir.
1.1. XSS İle Neler Yapılabilir
XSS açığından faydalanarak neler yapabilirsiniz:
- Kurban kullanıcının kimliğine bürünün.
- Kullanıcının gerçekleştirebileceği herhangi bir eylemi gerçekleştirin.
- Kullanıcının erişebildiği tüm verileri okuyun.
- Kullanıcının oturum açma kimlik bilgilerini yakalayın.
- Web sitesinin sanal tahrifini gerçekleştirin.
- Truva atı işlevselliğini web sitesine enjekte edin
XSS açığı genel olarak 3 ana başlık altında incelenebilir. Bu başlıkları aşağıda tek tek ele alacağım.
2. Reflected XSS
Reflected XSS, siteler arası komut dosyası oluşturmanın en basit çeşididir. Bir uygulama bir HTTP isteğinde veri aldığında ortaya çıkar ve bu verileri güvenli olmayan bir şekilde anında yanıta dahil eder.
Örnek:
https://0x010101.com/status?message=thank+you
<p>Status: thank you</p>
Yukarıda görüldüğü gibi veri olduğu gibi işlendi. Bunu gören saldırgan aşağıdaki gibi bir JavaScript kodunu hedef için çalıştırabilir.
https://0x010101.com/status?message=<script>/*injection+code*/</script>
<p>Status: <script>/*injection+code*/</script></p>
3. Stored XSS
Stored XSS, (kalıcı veya ikinci dereceden XSS olarak da bilinir), bir uygulama güvenilmeyen bir kaynaktan veri aldığında ve bu verileri daha sonraki HTTP yanıtlarına güvenli olmayan bir şekilde dahil ettiğinde ortaya çıkar.
Söz konusu veriler HTTP istekleri yoluyla uygulamaya gönderilebilir; örneğin, bir blog gönderisine yapılan yorumlar, bir sohbet odasındaki kullanıcı takma adları veya bir müşteri siparişindeki iletişim bilgileri. Diğer durumlarda, veriler diğer güvenilmeyen kaynaklardan gelebilir; örneğin, SMTP üzerinden alınan mesajları görüntüleyen bir web posta uygulaması, sosyal medya gönderilerini görüntüleyen bir pazarlama uygulaması veya ağ trafiğinden gelen paket verilerini görüntüleyen bir ağ izleme uygulaması.
Örnek:
Bir mesaj panosu uygulaması, kullanıcıların diğer kullanıcılara görüntülenen mesajları göndermesine izin verir. Veriler gerekli filtrelerden geçirilmediği için saldırgan JavaScript kodunu sayfayı ziyaret eden herkese gösterebilir.
<p>Selam, ben Serdar!</p>
<p><script>/*injection+code*/</script></p>
4. DOM XSS
DOM XSS, bir uygulama, genellikle verileri DOM’a geri yazarak, güvenilmeyen bir kaynaktan gelen verileri güvenli olmayan bir şekilde işleyen bazı istemci tarafı JavaScript içerdiğinde ortaya çıkar.
Aşağıdaki örnekte, bir uygulama, bir giriş alanındaki değeri okumak ve bu değeri HTML içindeki bir öğeye yazmak için JavaScript kullanır:
var search = document.getElementById('search').value;
var results = document.getElementById('results');
results.innerHTML = 'You searched for: ' + search;
Saldırgan giriş alanının değerini kontrol edebiliyorsa, kendi komut dosyalarının yürütülmesine neden olan kötü amaçlı bir değeri kolayca oluşturabilir:You searched for: <img src=1 onerror='/*injection+code*/'>
Tipik bir durumda, giriş alanı, bir URL sorgu dizesi parametresi gibi HTTP isteğinin bir kısmından doldurulur ve saldırganın, yansıtılan XSS ile aynı şekilde kötü amaçlı bir URL kullanarak bir saldırı gerçekleştirmesine olanak tanır.
Yazının girişinde de belirttiğim gibi XSS konusu oldukça derin ve geniş çaplı bir konu. Ben burada sadece 3 ana başlıkta ele aldım. Yazıyı yazarken sürekli vakit geçirdiğim ve herkese tavsiye ettiğim Port Swigger‘dan faydalandım. İlerleyen yazılarımda geniş çaplı bir XSS challenge çözümü yaparak konuyu genişleteceğim.
ek kaynak:
Yorum yaptığın için teşekkürler