首页 > 其他分享 >DVWA 之 CSP Bypass - 浏览器内容安全策略绕过

DVWA 之 CSP Bypass - 浏览器内容安全策略绕过

时间:2023-03-05 16:36:34浏览次数:65  
标签:src 浏览器 script 安全策略 DVWA Bypass com CSP 加载

十一、CSP Bypass - 浏览器内容安全策略绕过

原理

HTTP 返回报文头中的标签,浏览器会根据标签中的内容,判断哪些资源可以加载或执行。为了缓解潜在的跨站脚本问题,浏览器的扩展程序系统引入了内容安全策略这个概念。原来应对 XSS 攻击时,主要采用函数过滤、转义输入中的特殊字符、标签、文本来规避攻击。CSP 的实质就是白名单制度,开发人员明确告诉客户端,哪些外部资源可以加载和执行,开发者只需要提供配置,实现和执行全部由浏览器完成。

两种方法可以启用 CSP:

  1. 通过 HTTP 响应头信息的 Content-Security-Policy 字段
  2. 通过网页标签

例如:

<meta http-equiv="Content-Security-Policy" content="script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:">

以上例子的意思如下:

  • script-src 脚本:只信任当前域名
  • object-src:不信任任何 URL,即不加载任何资源
  • style-src 样式表:只信任 http://cdn.examplehttp://third-party.org
  • child_src:必须使用 HTTPS 协议加载。这个已从 Web 标准中删除,新版浏览器可能不支持
  • 其他资源:没有限制其他资源

当启用 CSP 后,不符合 CSP 的外部资源会被阻止加载

1. Low

$headerCSP = "Content-Security-Policy: script-src 'self' https://pastebin.com hastebin.com www.toptal.com example.com code.jquery.com https://ssl.google-analytics.com ;";

可以看到被信任的网站有:https://pastebin.com、hastebin.com、www.toptal.com、example.com、code.jquery.com 和 https://ssl.google-analytics.com

其中的 pastebin 是一个快速分享文本内容的网站,此时可以在 pastebin 网站上自己写一个 javascript 代码 alert("csp"),保存然后记住链接。

然后将链接在下面界面中输入,js 代码会被执行,由于网站需要注册登录,这里就不演示了。

攻击者可以把恶意代码保存在受信任的网站上,然后把链接发送给用户点击,实现注入。

2. Medium

http 头信息中的 script-src 的合法来源发生了变化,说明如下:

  • unsafe-inline:允许使用内联资源,如内联<script>元素,javascript:URL,内联事件处理程序(如 onclick)和内联 <style> 元素,必须包括单引号
  • nonce-source,仅允许特定的内联脚本块,nonce=“TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=”

直接输入以下代码

 <script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert(1)</script>

弹出信息框,表示注入成功

3. High

这个级别已经没有输入框了,不过题目已经给了足够多的提示。

首先先看一下 CSP 头,发现只有 script-src 'self';, 看来只允许本界面加载的 javascript 执行。

然后研究了一下这个点击显示答案的逻辑(逻辑在 source/high.js里), 大致如下: 点击按钮 -> js 生成一个 script 标签(src 指向 source/jsonp.php?callback=solveNum), 并把它加入到 DOM 中 -> js 中定义了一个 solveNum 的函数 -> 因此 script 标签会把远程加载的 solveSum({"answer":"15"})当作 js 代码执行, 而这个形式正好就是调用了 solveSum 函数, 然后这个函数就会在界面适当的位置写入答案.

<?php
header("Content-Type: application/json; charset=UTF-8");

if (array_key_exists ("callback", $_GET)) {
    $callback = $_GET['callback'];
} else {
    return "";
}

$outp = array ("answer" => "15");
# callback 可以被控制
echo $callback . "(".json_encode($outp).")";
?>

callback 参数可以被操控以生成任何你想要得到的结果, 比如 alert, 因此可以构造 Payload: <script src="source/jsonp.php?callback=alert('hacked');"></script>, 并把这个当做 include 参数传给界面就注入成功!

防护方法

内容安全策略 (CSP) 是一个额外的安全层,用于检测并削弱某些特定类型的攻击,包括跨站脚本和数据注入攻击等

标签:src,浏览器,script,安全策略,DVWA,Bypass,com,CSP,加载
From: https://www.cnblogs.com/augustine0654/p/17180844.html

相关文章

  • DVWA 之 JavaScript - JavaScript攻击
    十二、JavaScript-JavaScript攻击原理在页面上输入的内容中带有可执行的javascript,而使用这段输入内容的时候,让这段用户提供的代码执行了,也就是你写的代码执行了非你......
  • DVWA 之 Weak Session IDs - 弱会话IDs
    十三、WeakSessionIDs-弱会话IDs原理用户登录后,在服务器就会创建一个会话(Session),叫做会话控制,接着访问页面的时候就不用登录,只需要携带Session去访问。SessionID......
  • DVWA 之 XSS(Reflected) - 反射型XSS
    九、XSS(Reflected)-反射型XSS原理XSS,全称CrossSiteScripting,即跨站脚本攻击,某种意义上也是一种注入攻击,指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,......
  • DVWA之File Inclusion
    1.本地文件包含漏洞:仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的,因此该情况下,攻击着更多的会包含一些固定的系统配置文件,从而读取系统敏......
  • DVWA 之 File Upload-文件上传
    五、FileUpload-文件上传文件上传漏洞,通常是由于对上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马获取服务器的webshell权限,因此文件上传漏洞......
  • DVWA 之 Insecure CAPTCHA-不安全的验证
    六、InsecureCAPTCHA-不安全的验证原理InsecureCAPTCHA意思是不安全的验证码,CAPTCHA是CompletelyAutomatedPublicTuringTesttoTellComputersandHumansApa......
  • DVWA 之 SQL Injection-SQL注入
    七、SQLInjection-SQL注入原理SQL注入是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到恶意执行SQL语句的目的。手工注入常规思路判断是否存在注入,注......
  • DVWA 之 SQL Injection(Blind) - SQL注入(盲注)
    八、SQLInjection(Blind)-SQL注入(盲注)原理SQL盲注与一般注入的区别在于一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常无法从显示页面......
  • DVWA 之 CSRF-跨站请求伪造
    三、CSRF-跨站请求伪造原理指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身......
  • DVWA 之 Command Injection-命令注入
    二、CommandInjection-命令注入原理命令注入是指对一些函数的参数没有做过滤或过滤不严导致的,可以执行系统或者应用指令(CMD命令或者bash命令)的一种注入攻击手段。PHP命令......