CSP
介绍
内容安全策略,实质上是白名单策略,通过限定允许加载哪些外部资源而保证网站的安全性。
CSP规定的指令:
CSP规定的值
在实际使用中,CSP策略在Content-Security-Policy HTTP响应头或元素meta标签中提供。
例如:
<meta http-equiv="Content-Security-Policy" content="script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; ">
//限定<script>只能来源于源目录;拒绝加载一切对象;能允许来源于cdn.example.org third-party.org的样式
DVWA
Low
应用防御措施
Content-Security-Policy: script-src 'self' https://pastebin.com example.com code.jquery.com https://ssl.google-analytics.com ;";
//脚本只能来源于'self' https://pastebin.com example.com code.jquery.com https://ssl.google-analytics.com
攻击方式
通过在网站根目录写入Payload测试语句
在输入框填入文件路径,浏览器成功执行
Medium
应用防御方式
Content-Security-Policy: script-src 'self' 'unsafe-inline' 'nonce-TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=';
//脚本来源只能是'self' 页面内嵌的标签和事件监听函数 指定的内联脚本块
攻击方式
Payload:
<script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert("xss")</script>//指定的内联脚本块
<script src="../../x">dd</script> //内联标签
High
应用防御方式
Content-Security-Policy: script-src 'self';
//脚本来源只能是'self'
前端没有输入框,通过点击按钮 -> js 生成一个 script 标签(src 指向 source/jsonp.php?callback=solveNum), 并把它加入到 DOM 中 -> high.js 中定义了一个 solveNum 的函数 -> 因此 script 标签会把远程加载的 solveSum({“answer”:“15”}) 当作 js 代码执行, 而这个形式正好就是调用了 solveSum 函数, 然后这个函数就会在界面适当的位置写入答案
攻击方式
网页除了触发high.js,还能通过burpsuite抓包,将提交的callback参数的值修改为alert(’/xss/’); 成功弹窗