DVWA Content Security Policy (CSP) Bypass

内容安全策略(Content Security Policy,CSP)

这篇讲CSP讲得很好:

Content Security Policy 入门教程 - 阮一峰的网络日志

 

是一种Web安全标准,旨在减轻跨站脚本(XSS)等Web应用程序安全漏洞的风险。以下是有关CSP的概念、攻击原理以及其他相关知识点:

概念

  1. CSP是什么:CSP是一种安全政策,它是一组规则,指定哪些资源可以加载到Web页面中。这些规则以HTTP标头的形式发送到浏览器,浏览器根据这些规则来限制哪些内容可以被执行或加载。

  2. 资源控制:CSP允许网站管理员明确定义哪些域名上的资源可以被加载和执行,包括JavaScript、样式表、图片、字体等。

  3. 减轻XSS风险:CSP的主要目标是减轻XSS攻击风险。它通过限制执行恶意脚本的能力,帮助防止XSS攻击的成功。

攻击原理

  1. XSS攻击:XSS攻击者通常试图在网站上注入恶意脚本,这些脚本在用户的浏览器上执行。攻击者可能将恶意脚本嵌入到网站的输入字段、评论、博客文章等地方。

  2. CSP的作用:当网站实施了CSP,浏览器将根据CSP规则来决定是否执行或加载特定的脚本。如果恶意脚本的来源不在CSP规则允许的范围内,浏览器将拒绝执行该脚本,从而减轻了XSS攻击的威胁。

  3. 违反CSP:如果攻击者的恶意脚本违反了CSP规则,浏览器通常会在控制台中记录错误,或者在页面上显示有关CSP违规的报告。

其他相关知识点

  1. CSP规则:CSP规则是通过HTTP标头(通常是Content-Security-Policy)传递到浏览器的。规则可以包括允许的资源域名、允许的脚本来源、不允许的脚本执行等。

  2. CSP报告:CSP可以配置为生成报告,以便网站管理员了解哪些CSP违规发生了。这些报告可用于识别潜在的安全问题。

  3. CSP指令:CSP规则可以包括多个指令,每个指令用于定义相应类型资源的加载规则。

  4. default-src 指令:指定默认情况下允许加载的资源来源。
    script-src 指令:用于限制可执行脚本的来源。
    style-src 指令:用于限制可应用的样式表的来源。
    img-src 指令:用于限制可加载的图像的来源。
    connect-src 指令:用于限制可建立网络连接的来源。
    font-src 指令:用于限制可加载的字体文件的来源。
    frame-src 指令:用于限制可以嵌入页面的框架的来源。
    report-uri 指令:指定将安全违规报告发送到的 URL。
     

DVWA

LOW

script-src 指令:用于限制可执行脚本的来源。

在CSP的规则中,'self'表示当前网站的源。当使用'self'作为脚本来源时,只有同源的脚本才会被加载和执行。

相当于设置白名单,只有圈出来的这些才可以执行js代码 

我们可以先用白名单里的这个网站尝试  https://pastebin.com

直接点create new paste创建新帖,然后点raw,复制网址

  

在DVWA输入URL,但是我输入后没有弹窗,据说是因为这个网站是米国的,也不知道对不对

MEDIUM

源码分析

 

  1. 内联(Inline)

    • 概念:内联是指直接在HTML文档中嵌入脚本、样式或事件处理程序的代码。内联脚本可以在HTML标记中使用<script>标签或事件处理程序属性中定义,而内联样式可以通过<style>标签或style属性定义。

    • CSP策略:CSP允许网站管理员控制内联脚本和样式的执行

  2. unsafe-inline

    • 概念unsafe-inline是CSP指令之一,它允许内联脚本和内联样式的执行。如果CSP策略包括unsafe-inline,浏览器将允许网页中的内联脚本和样式执行。

  3. nonce-source

    • 概念nonce-source是CSP指令之一,它允许网站管理员为每个内联脚本和样式生成一个随机值(称为 nonce)。这个 nonce 值需要与script-srcstyle-src指令中的值匹配,以允许特定 nonce 值的内联脚本和样式执行。

    • 原理nonce是一个仅一次有效的随机值,与内联脚本或样式的nonce属性一起使用。如果内联资源的nonce值与CSP策略中的nonce-source匹配,那么浏览器将允许执行这些内联资源。

    • 安全性nonce提供了一层额外的安全性,因为即使内联资源的来源受到攻击,攻击者仍无法注入自己的脚本或样式,因为它们的nonce值不匹配。

    • nonce 的生成nonce 是随机生成的字符串,通常在每个页面加载时都会生成一个新的nonce 值。这个值可以是包含字母、数字和特殊字符的随机字符串,类似于密钥。

总之,nonce 是 CSP 中的一种安全机制,用于确保只有在内联脚本和样式的 nonce 值与 CSP 策略中指定的 nonce-source 匹配时才能执行。

意思是只能使用script元素且脚本块值nonce值为...

步骤

构造一个标签<script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert('ccc')</script>

 

HIGH

源码包含一个PHP文件和一个JS文件

看不懂,,,,

首先,在文件 high.php 中设置了一个 CSP 头部,规定只允许从同一源的脚本加载,即 script-src 'self'。这样可以防止恶意代码的注入。然后,通过 PHP 的 header 函数将 CSP 头部发送给浏览器。

接下来,在表单提交时,如果存在名为 include 的 POST 参数,将其作为代码包含在页面主体中。

点击按钮时,会执行 JavaScript 函数 clickButton,该函数动态创建一个 script 元素,并设置其 src 属性为 source/jsonp.php?callback=solveSum。这里使用了 JSONP(JSON with Padding)技术,通过指定回调函数名称的方式来获取跨域的数据。当脚本加载完成后,会调用函数 solveSum,将返回的数据展示在页面上。

在文件 high.js 中定义了 clickButton 函数用于创建 script 元素并加载跨域脚本,以及 solveSum 函数用于处理返回的数据。最后,通过事件监听,当按钮被点击时,调用 clickButton 函数。

简单来说
当点击按钮后,以下步骤会依次发生:

首先,浏览器会执行 JavaScript 函数 clickButton。

在 clickButton 函数中,会动态创建一个 <script> 元素。

<script> 元素的 src 属性被设置为 source/jsonp.php?callback=solveSum,其中 source/jsonp.php 是一个远程脚本的 URL,callback=solveSum 指定了回调函数的名称为 solveSum。

浏览器会开始加载指定的远程脚本文件 source/jsonp.php。

当远程脚本文件加载完成后,返回的数据会通过回调函数 solveSum 进行处理。

在 solveSum 函数中,返回的数据会被展示在页面上。
————————————————
版权声明:本文为CSDN博主「秋说」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/2301_77485708/article/details/131225715

 

所以我们可以尝试利用 include 参数修改请求 JSONP 的 callback 参数内容,然后写入到页面里 

<script src=source/jsonp.php?callback=alert(document.cookie)></script>

还有一种方法,用brup抓包修改callback参数 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值