dvwa-csp bypass
前言
CSP 指的是内容安全策略,为了缓解很大一部分潜在的跨站脚本(XSS) 问题,浏览器的扩展程序系统引入了内容安全策略(CSP)的一般概念。通过引入一些相当严格的策略使扩展程序在默认情况下更加安全,开发者可以创建并强制应用一些规则,管理网站允许加载的内容。
CSP 以白名单的机制对网站加载或执行的资源起作用,在网页中策略通过 HTTP 头信息或者 meta 元素定义。CSP 虽然提供了强大的安全保护,但是它也令 eval() 及相关函数被禁用、内嵌的 JavaScript 代码将不会执行、只能通过白名单来加载远程脚本。如果要使用 CSP 技术保护自己的网站,开发者就不得不花费大量时间分离内嵌的 JavaScript 代码和做一些调整。
low
来看看源码
最后那句不完整的注释:// allows js from self, pastebin.com, hastebin.com, jquery and google analytics.
也就是说这个网页允许来自本身,pastebin.com, hastebin.com, jquery and google analytics 的js
pastebin 是个快速分享文本内容的网站,假如文本的内容是一段 JavaScript 代码,网页就会把该代码包含进来。
但是,火狐和谷歌貌似对此进行了修复,所以并没有弹窗出现
medium
来来看看源码
这边是想通过使用nonce来防止攻击者添加内联脚本。
Nonce是或Number once的缩写,在密码学中Nonce是一个只被使用一次的任意或非重复的随机数值。
源码如下,HTTP 头信息中的 script-src 的合法来源发生了变化。script-src 还可以设置一些特殊值,unsafe-inline 允许执行页面内嵌的
即可
high
根据页面显示,我打开了jsonp.php
需要修改 jsonp.php 文件更改回调函数的脚本。
来看看是怎么实现的
document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问,
createElement() 方法通过指定名称创建一个元素,
body 属性提供对 < body > 元素的直接访问,对于定义了框架集的文档将引用最外层的 < frameset >。
appendChild() 方法可向节点的子节点列表的末尾添加新的子节点,也就是网页会把 “source/jsonp.php?callback=solveNum” 加入到 DOM 中。
getElementById() 方法可返回对拥有指定 ID 的第一个对象的引用
innerHTML 属性设置或返回表格行的开始和结束标签之间的 HTML。
抓包可发现,callback可控那么可以将solveSum改成
然后点forward进行放包,即可出现弹窗
impossible
这个级别是 high 级别的加强,JSONP 调用的回调函数是硬编码的,CSP 策略被锁定为只允许外部脚本。
- 本文作者:Almond
- 本文链接:http://example.com/2021/02/16/dvwa-csp-bypass/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!