Penligent Başlık

XSS Hile Sayfası: Zorlu Güvenlik Mühendisleri için Pratik Bir Kılavuz

Başka bir xss kopya kağıdı neden hala önemli?

Modern çerçeveler ≠ XSS içermez. React/Angular/Svelte'deki otomatik kaçış, şablonlama boşluklarını azaltır, ancak gerçek sistemler hala DOM API kötüye kullanımı, güvenli olmayan 3. taraf widget'ları, izin verilen Markdown/WYSIWYG'yi gönderir, javascript: URL işleyicileri, SVG/MathML, JSONP kalıntıları ve örtük güven konum/hash/postMessage.

Vektör ekosistemleri evrimleşir. PortSwigger sürekli olarak yüklere şu şekilde açıklama ekler olay / etiket / nitelik / tarayıcı"kabile hafızasını" büyük ölçüde azaltır. Yük taksonomilerini yeniden keşfetmeden geniş bir kapsama ihtiyacınız olduğunda bu küratörlük altın değerindedir.

Filtreleme tek başına bir savunma değildir. OWASP bunu on yılı aşkın bir süredir tekrarlamaktadır: doğruluk verinin işleme bağlamı. Birleştirme uygun çıktı kodlaması, steri̇li̇zasyon (kullanıcı tarafından yazılan HTML için), Politika (CSP, Güvenilir Tipler) ve çerçeve hi̇jyeni̇ pazarlığa açık değildir.

xss hile sayfası Penligent

Saldırı yüzeyi × bağlam matrisi

Bu matrisi şu şekilde kullanın uygulama kontrol li̇stesi̇ Playwright/Burp/Nuclei doğrulamaları veya kod denetimleri yazarken. Her satır bir işleme bağlar bağlam riskli lavabolar, ortak girişler, the ilk savunma hamlesive nasıl doğrulanır ölçekte.

BağlamRiskli batıklar (açıklayıcı)Tipik giriş noktalarıBirincil savunmaGeniş ölçekte doğrulama nasıl yapılır
HTML metniinnerHTML, şablon dize birleştirmeyansıyan parametreler, arama kutuları, kullanıcı biyografileri, yorumlarHTML çıktı kodlaması; asla güvenilmeyen HTML göndermeyinHeadless render + DOM-taint kancaları; önce/sonra DOM farkı
Öznitelikhref/src/action, herhangi üzerinde* işleyicijavascript: URL'ler, SVG öznitelikleri, veri: URL'lerÖznitelik/URL kodlamasıyasaklamak javascript:; CSPÖznitelik bazlı fuzz; otomatik tetikleyicileri ve gezinmeyi izleme
JavaScripteval, Fonksiyon, setTimeout(string)JSONP geri aramaları, dinamik komut dosyası birleştirme/ayrıştırmaDinamik değerlendirmeyi yasaklayın; girdileri serileştirin; gerekirse sandboxKanca eval/Fonksiyonçağrı yığınlarını ve argümanlarını toplar
URL/Navkonum, belge.URL concataçık yönlendirmeler, hash/fragment enjeksiyonlarıKanonikleştir; katı izin listeleri; asla ham dizeleri dikmeGerçek UA tekrar oynatma; yönlendirme zinciri izleme
Şablonlama/SSRgüvensiz filtreler/parçalarsunucu tarafı şablon veri geçişleriSıkı şablon kaçışı; değişken beyaz listeleriŞablon birim testleri + yer tutucu bulanıklaştırma
Zengin içerikWYSIWYG/Markdown/SVG/MathMLyapıştırılan harici HTML/SVG; kullanıcı profili içeriğiListe temizliğine izin ver (DOMPurify); CSPTehlikeli etiketleri bırakınToplu yük yeniden oynatma + CSP ihlali günlüğü

Gerçekten çalıştırabileceğiniz minimum tekrarlanabilir örnekler (MRE'ler)

1) Öznitelik bağlamı + sıfır etkileşimli tetikleyici

<input autofocus onfocus="fetch('/beacon?xss=1')">

Neden önemli? Odak olayları, birçok UX akışında (arama alanları, hızlı istemler) yüklendiğinde kendiliğinden tetiklenir. İle değiştirin <svg onload=…> veya <img onerror="…"> farklı tetikleyici semantiklerini test etmek için.

2) SVG taşıyıcı + URL işleme tuhaflıkları

<svg><a xlink:href="javascript:fetch('/beacon?svg')">x</a></svg>

Neden önemli? SVG, tarihsel olarak ilginç öznitelik ayrıştırmasına sahip ayrı bir XML ad alanıdır. Ekipler genellikle SVG'yi sterilize etmeyi veya Markdown oluşturucular aracılığıyla buna izin vermeyi unutur.

3) DOM tabanlı XSS (kaynak → lavabo soyağacı)

<script>
  const q = new URL(location).hash.slice(1);
  document.getElementById('out').innerHTML = q; // sink
</script>
<div id="out"></div>

Neden önemli? Klasik "URL'den oku, DOM'a yaz" anti-paterni. Eski sitelerde ve dahili araçlarda her yerde var. İle düzeltin bağlam-doğru kodlama ve asla doğrudan HTML lavabolarına yazmayın.

Savunma temelleri (önce mühendislik, sloganlar değil)

  1. Bağlama göre çıktı kodlaması. Şunun için kodlayın HTML / Öznitelik / URL / JS sırasıyla. Çerçeve otomatik kaçışı şunları kapsamaz elle haddelenmiş DOM güncellemeler.
  2. Kullanıcı HTML'si için izin listesi sanitizasyonu. İş mantığı zengin içerik (yorumlar, biyografiler, bilgi tabanları) gerektirdiğinde DOMPurify (veya eşdeğeri) sertleştirilmiş yapılandırmalarla; kara liste "kelime doğramadan" kaçının.
  3. İçerik Güvenliği Politikası. İle başlayın script-src 'self' + varsayılan olarak satır içi blok; ayarla object-src 'none' ve base-uri 'none'. Evlat edinmek Güvenilir Tipler Chromium'da güvenli DOM API'lerini derleme/çalışma zamanında zorlamak için.
  4. Tehlikeli API denetimi. Yasakla ya da geçit aç eval/yeni İşlev/setTimeout(string) ve dinamik JSON→kod dönüşümleri. Derleme sırasında ESLint kurallarıyla zorlayın ve ihlaller ortaya çıktığında CI'yi başarısızlığa uğratın.
  5. Kod olarak test edin ve doğrulayın. Yük tekrarını otomatikleştirin. İle eşleştirin CSP ihlal raporlaması ve ağ geçidi/log korelasyonu "demolanabilir açılır pencereleri" istismar edilebilir iş için önemli olan yollar.

Hile sayfasından boru hattına: sevkiyat yapan otomasyon

"Vektör kütüphanesinden" "üretim sınıfı güvenceye" giden en kısa yol beş aşamalı bir döngüdür:

  1. Bağlam keşfi. Statik taramalar (ESLint kuralları, semantik grep) + potansiyel yutakları etiketleyen çalışma zamanı probları (innerHTML, öznitelik ayarlayıcıları, gezinme noktaları).
  2. Vektör çizelgeleme. Her lavabo/bağlamı bir küratörlü havuz yükleri (öznitelik olayları, etiket tuhaflıkları, URL işleyicileri), tarayıcıya göre filtreleme ve özellik bayrakları.
  3. Başsız prova. Playwright/Chromium vektör başına çalışır. Konsol, ağ yakalama, CSP ihlallerive DOM mutasyonları.
  4. Sinyal korelasyonu. Başsız bulgulara katılın API ağ geçidi ve uygulama günlükleri̇ "gürültü ile gerçeği" ayırmak için. Bu, ilk günden yanlış pozitifleri öldürür.
  5. Kanıt öncelikli raporlama. Ekran görüntülerini, HTTP izlerini, DOM önce/sonra farklarını ve ilke ihlallerini otomatik olarak ekleyin-o zaman güven puanı Böylece mühendisler nereden başlayacaklarını bilirler.

Minimal Playwright yeniden oynatıcısı (drop-in snippet)

import { chromium } from 'playwright';

const vektörler = [
  '#\"&gt;<img src="x" onerror="fetch(\">',
  '#<svg onload="fetch(\">'
];

(async () =&gt; {
  const browser = await chromium.launch();
  const sayfa = await browser.newPage();
  page.on('console', m =&gt; console.log('console:', m.text()));
  page.on('pageerror', e =&gt; console.error('pageerror:', e));
  for (const v of vectors) {
    await page.goto('https://target.example/' + v);
    await page.screenshot({ path: `evidence_${encodeURIComponent(v)}.png` });
  }
  await browser.close();
})();

Üretin: her çalıştırmaya kaynak→bağlantı soy etiketleri ekleyin, açın Yalnızca CSP raporu ihlalleri toplamak ve depolamak için DOM farklılıkları PR'larda gerilemeleri belirgin hale getirmek için.

Tasarlamanız gereken çerçeve gerçekler

  • React/JSX. Otomatik kaçış yardımcı olur, ancak dangerouslySetInnerHTML ve çiğ ref.current.innerHTML = ... lavaboyu yeniden açın. Onlara kod kokusu muamelesi yapın; bir dezenfektanın ve Güvenilir Tipler politikasının arkasına saklanın.
  • Açısal. Dezenfektan iyi, ama bypassSecurityTrustHtml ve benzeri API'ler delikler açabilir; her bypass'ı belgeleyin ve incelenmiş kaynaklarla sınırlayın.
  • Sonraki/Sonraki/SSR. Sunucu tarafından oluşturulan sayfalar yalnızca kodlanmış İçerik. Sunucu hatalarını "temizlemek" için asla istemci çerçevelerine güvenmeyin.
  • Markdown/MDX/WYSIWYG. Onlara şöyle davranın HTML alımı sorunlar. Oluşturucunuzu güçlendirin, güvenilmeyen widget'ları korumalı alana alın ve olay özniteliklerini/URL işleyicilerini temizleyin.
  • SVG/MathML. Bunlara izin vermeniz gerekiyorsa, özellik kümesini sınırlandırın ve XML ad alanlarını anlayan bir temizleyici çalıştırın. Kritik değilse, aşağıdakilere dönüştürün güvenli raster sunucuda.

Gerçekten ihtiyaç duyacağınız pratik yük aileleri

  • Olay üzerinde otomatik tetikleyici: otomatik odaklama, onload, onerror, onanimationstart, onfocus, onpointerenter. Kullanıcı tıklamaları olmadan istismar edilebilirliği kanıtlamak için harika.
  • URL işleyicileri: javascript:, veri:ve bazen vbscript: (eski). İzin listelerini uygulayın.
  • Şablon çarpışmaları: Saf filtrelerden geçen bölme/katlama hileleri (örneğin, öznitelik bağlamlarından kopup HTML'ye yeniden girmek).
  • DOM clobbering: Kod yollarını yeniden yönlendirmek ve bir lavaboya inmek için kimliklerin/isimlerin üzerine yazın.
  • Mutasyon-gözlemci zamanlaması: İlk yükleme yerine dinamik güncellemelerden yararlanan tetikleyiciler.

CSP ve Güvenilir Türler: "olması güzel "den korkuluğa

  • CSP kod kaynaklarını ve satır içi yürütmeyi kısıtlamak için size bir ilke dili sunar. Sıkı başlayın, sonra sadece incelenmiş vakalar için genişletin. İle eşleştirin rapor-uri/rapor-için ve hasat i̇hlal raporlari telemetrenizde.
  • Güvenilir Tipler geliştiricileri geçmeye zorlamak politika tarafından oluşturulmuş değerlerini, aksi takdirde ham dizeleri kabul edecek olan DOM API'lerine (innerHTML, outerHTML, insertAdjacentHTML, Range#createContextualFragment). Bu, DOM XSS'nin tüm sınıflarını yapı olarak ortadan kaldırır.
  • Yayılma ipucu: içinde CSP çalıştırın sadece rapor iki sprint için; ihlalleri düzeltin; sonra uygulayın. Tek bir tane tanıtın uygulama genelinde Güvenilen Türler ilkesi ve yalnızca onaylanmış inşaatçılar aracılığıyla "kutsanmış" HTML yayınlayın.

Mühendislere istismar edilebilirlik nasıl kanıtlanır?

  1. Repro senaryoları: Yeniden oynatmak için bir one-liner (URL veya curl) ve bir Playwright dalı sağlayın.
  2. DOM farkı: Tam olarak değişen düğümü ve yolu göster (#app > .profile > .bio).
  3. Çağrı yığınları: JS lavaboları için, yığın izlerini eval/Fonksiyon Kancalar.
  4. CSP kanıtları: Satır içi/komut dosyası src ihlalleri için ihlal JSON'u ekleyin.
  5. İş anlatımı: "Bu, oturum belirteçlerini /hesap enjekte edilen bir <img> "işaretçi" her seferinde "alarm patladı "yı yener.

Bu xss hile sayfasını Penligent içinde çalıştırma

Eğer zaten kullanıyorsanız Penligent otomatik bir pentest platformu olarak, yukarıdakileri tek bir çalıştırılabilir şablon halinde paketleyebilirsiniz:

  • Görev şablonu: "XSS Recon + Validate." Aracı keşif yapar (alt alan/port/parmak izi), tespit edilen bağlam başına vektörleri planlar, başsız yeniden oynatmayı yürütür ve sinyalleri ilişkilendirir gürültüyü kesmek için kütüklerle/geçitlerle.
  • Kanıt öncelikli ihracat. Bulgular aşağıdakilerle birlikte gönderilir güven puanları, tekrarlanabilir adımlar, ekran görüntüleri, CSP ihlal günlükleri ve mühendislerinizin güvenebileceği DOM farkları.
  • En çok nerede yardımcı olur. Karışık eski + SPA yığınlarına sahip büyük kapsamlar veya CSP/Güvenilir Türlere geçiş yapan ve ihtiyaç duyan ekipler kanıt odaklı triyaj yükün önemsizliğinden ziyade.
XSS hile sayfası

Tecrübeli ekipleri ısırmaya devam eden yaygın tuzaklar

  • Girdiyi sterilize edin, çıktıyı değil. HTML kabul etmeniz gerekiyorsa, sanitize edin ve yine de hedef bağlama göre çıktı üzerinde kodlama yapar; ikisi birbirinin yerine kullanılamaz.
  • İzin vermek javascript: "esneklik" için. Tamamen kaldırın; yalnızca belirli protokolleri beyaz listeye alın (https, mailtobelki tel).
  • Markdown'a "güvenli metin" olarak davranma. Bu bir işleyicidir - güvenliğe eklentileri karar verir. İzin verilen etiketleri/öznitelikleri denetleyin; güvenilmeyen SVG için sunucu tarafı rasterleştirmeyi düşünün.
  • HTML dışı bağlamları yok sayma. URL birleştirme ve JSON→JS değerlendirmeleri tekrarlanan suçlulardır. "Kod için dize yok" politikasını güçlendirin.
  • Bir çevreye güvenmek. Headless'ta başarısız olan XSS, mobil Chromium'da veya eski masaüstü yapılarında başarılı olabilir. Saklayın tarayıcı matrisi yüksek değerli uygulamalar için.

Üretim kontrol listesi, bunu CI rozetinizin yanına iliştirin

  • Bağlam farkındalığı kodlama HTML/Attr/URL/JS için birim testleri içeren yardımcı programlar
  • DOMPurify (veya eşdeğeri) zengin içerikli yollar için sertleştirilmiş bir yapılandırmaya kilitlendi
  • CSP ile script-src 'self' (güvenli olmayan satır içi yok), object-src 'none', base-uri 'none'Telemetriye bağlı ihlal toplama
  • Güvenilir Tipler ham dize havuzlarını engellemek için politika + derleme zamanı lint kuralları
  • ESLint yasaklama kuralları eval/yeni İşlev/setTimeout(string) (CI-zorunlu)
  • Oyun Yazarı tekrar paketi PortSwigger tarzı vektörlerle tohumlanmış; vektör başına ekran görüntüleri + DOM farkları
  • Otomatik sinyal korelasyonu uygulama günlükleri / API ağ geçidi olayları ile
  • Kanıt öncelikli raporlar ile güven puanları ve iş etkisi notları
  • PR şablon satırları: "Yeni HTML lavaboları mı sunuyor?" "Dezenfektanı atlar mı?" "TT politikası güncellendi mi?"
  • Üçüncü taraf widget/WYSIWYG/Markdown ayarlarının düzenli olarak gözden geçirilmesi

SSS

S: Zaten React/Angular kullanıyorsak, yine de buna ihtiyacımız var mı?
C: Evet. Frameworkler tüm DOM yazımlarını, üçüncü taraf widget'larını veya Markdown/SVG'yi denetlemez. Hala sanitizer + CSP + TT'ye ihtiyacınız var ve ham DOM lavabolarına güvenilmeyen veriler yazmaktan kaçınmalısınız.

S: CSP ile tüm satır içi komut dosyalarını engellemeli miyiz?
C: Evet, varsayılan olarak. Nonces veya hash'leri yalnızca kesinlikle gerekli olduğunda kullanın ve istisnayı belgeleyin. Uzun vadeli hedef, satır içi komut dosyalarından tamamen kaçınmaktır.

S: Dezenfeksiyon yeterli mi?
C: Hayır. Sanitizasyon, aşağıdakiler için saldırı yüzeyini azaltır HTML alımıama yine de doğru çıktı kodlaması ve politika korkulukları. Farklı sorunlar, farklı araçlar.

S: Hangi tarayıcıları test ediyoruz?
C: En azından kullanıcı tabanınızın en iyi iki masaüstü + mobil motoru. Küçük bir matris tutun; bazı vektörler tarayıcıya özgüdür veya özellik bayraklıdır.

Daha fazla okuma (yetkili)

  • PortSwigger - Siteler Arası Komut Dosyası (XSS) Hile Sayfası - vektörler, PoC'ler ve tarayıcı notlarından oluşan canlı bir katalog.
  • OWASP - XSS Önleme Hile Sayfası - titiz, bağlama özgü kodlama stratejileri ve yap/yapma tabloları.
  • OWASP - DOM Tabanlı XSS Önleme Hile Sayfası - kaynak→bağlantı kalıpları ve tarayıcıdaki hafifletmeler.
  • PortSwigger - XSS nedir? - Yeni işe alınanların eğitimi için yapılandırılmış eğitim ve uygulamalı laboratuvarlar.

Ek: hızlı sanitasyon ve kodlama referansı

  • HTML metin düğümleri → kaçış & " ' /
  • Öznitelik değerleri → HTML-öznitelik kodlama + güvenilmeyen verilerden olay özniteliklerine izin vermeme
  • URL'lerbileşenleri kodla; izin listesi protokolleri; asla ham yazmayın javascript: / veri:
  • JS dizeleriserileştirmek güvenli bir şekilde; kullanıcı verilerini asla kod yorumlayan API'lere aktarmayın

Kapanış notu: Yararlı bir xss hi̇le sayfasi yapabileceğiniz bir boru hattınıza bağlayın-Akıllı yüklerin posteri değil. Bağlam keşfi ile başlayın, vektörleri bağlama göre planlayın, başsız olarak tekrar oynatın, günlüklerle ilişkilendirin ve kanıtları güven puanlarıyla gönderin. İster Penligent'ı benimseyin ister kendi koşum takımınızı oluşturun, süreci kanıt ve politikanın korkulukları uygulamasına izin verin.

Gönderiyi paylaş:
İlgili Yazılar
tr_TRTurkish