About
内容安全策略(CSP)用于定义脚本和其他资源可以从何处加载或执行,本模块将指导您根据开发人员犯下的常见错误来绕过该策略。
CSP 被设计成完全向后兼容。不支持CSP的浏览器也能与实现了 CSP 的服务器正常合作,反之亦然:不支持 CSP 的浏览器只会忽略它,如常运行,默认为网页内容使用标准的同源策略。如果网站不提供 CSP 头部,浏览器也使用标准的同源策略。
同源的定义:
如果两个 URL 的 protocol、port (en-US) (如果有指定的话)和 host 都相同的话,则这两个 URL 是同源。
URL | 结果 | 原因 |
---|---|---|
http://store.company.com/dir2/other.html |
同源 | 只有路径不同 |
http://store.company.com/dir/inner/another.html |
同源 | 只有路径不同 |
https://store.company.com/secure.html |
失败 | 协议不同 |
http://store.company.com:81/dir/etc.html |
失败 | 端口不同 ( http:// 默认端口是80) |
http://news.company.com/dir/other.html |
失败 | 主机不同 |
CSP通过指定有效域——即浏览器认可的可执行脚本的有效来源——使服务器管理者有能力减少或消除XSS攻击所依赖的载体。一个CSP兼容的浏览器将会仅执行从白名单域获取到的脚本文件,忽略所有的其他脚本 (包括内联脚本和HTML的事件处理属性)。
除限制可以加载内容的域,服务器还可指明哪种协议允许使用;比如 (从理想化的安全角度来说),服务器可指定所有内容必须通过HTTPS加载。一个完整的数据安全传输策略不仅强制使用HTTPS进行数据传输,也为所有的cookie标记安全标识 cookies with the secure flag,并且提供自动的重定向使得HTTP页面导向HTTPS版本。网站也可以使用 [Strict-Transport-Security](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Strict-Transport-Security)
HTTP头部确保连接它的浏览器只使用加密通道。
Object
绕过内容安全策略(CSP),并在页面中执行JavaScript。
001 Low
检查策略,以查找可用于承载外部脚本文件的所有源。
我们先随便填一个网站,提交请求,观察 Response:
我们发现服务器限制了脚本只能从下面的网站中加载:
https://pastebin.com
hastebin.com
www.toptal.com
example.com
code.jquery.com
https://ssl.google-analytics.com
我们进入 pastebin,发现这是一个快速分享文本内容的网站,假如文本是一段 JavaScript 代码,那网站就会把它包含进来,但测试 JavaScript 脚本发现没有弹框。根据DVWA issue 462,我们使用 hastbin 的文本分享功能:
然后回到 DVWA 页面,弹窗成功:
002 Medium
CSP 策略尝试使用 nonce 来防止攻击者添加内联脚本。
我们先尝试用上一个等级的 URL,结果返回:
我们观察响应包的内容:
服务端多了一个 nonce 值,它看上去是 base64 编码,我们把它解码看看:
这里问题出在了unsafe-inline
,现在不从外界导入 JavaScript 资源,而是直接通过内联 JavaScript 代码,注入时直接令 nonce 为设定好的值即可。
<script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert(document.cookie)</script>
003 High
页面对 source/jsonp.php
进行 JSONP 调用,传递要回调的函数名,你需要修改 jsonp.php
文件更改回调函数的脚本。
我们发现,点下按钮后,后端会调用前端的 JavaScript 代码,运行solveSum()
函数计算出值:
我们观察 Brupsuite 的请求:
这里的solveSum
正好对应函数名,那么可以试一试在这直接输入一个 JavaScript 代码。我们先 Intercept on 截断请求,然后修改callback
的参数:
点击 Forward 放行数据包,可以看到原来的页面弹窗了:
References
- 13 - CSP Bypass (low/med/high) - Damn Vulnerable Web Application (DVWA) - YouTube
- DVWA 黑客攻防实战(十五) 绕过内容安全策略 Content Security Policy (CSP) Bypass - JOJO_2046 - 博客园 (cnblogs.com)
- DVWA 通关指南:CSP Bypass(CSP 绕过) - 乌漆WhiteMoon - 博客园 (cnblogs.com)