首页 > 其他分享 >DVWA靶场实战(十三)——CSP Bypass

DVWA靶场实战(十三)——CSP Bypass

时间:2023-02-07 12:55:41浏览次数:43  
标签:src source DVWA js callback Bypass com CSP

DVWA靶场实战(十三)

十三、CSP Bypass:

1.漏洞原理:

  CSP Bypass全称是Content-Security-Policy,中文叫做绕过内容安全策略。Content-Security-Policy是一个HTTP响应头的名称,现代浏览器使用它来加强文档(或网页)的安全性。 Content-Security-Policy头允许你限制哪些资源(如JavaScript、CSS、图像等)可以被加载,以及它们可以从哪些URL加载。虽然它主要是作为一个HTTP响应头使用,但你也可以通过元标签来应用它。内容安全策略这一术语通常被缩写为CSP。

2.补充:

·Script-src’self’:script-src脚本只信任当前域名;

·Object-src’none’:不信任任何URL,即不加载任何资源;

·Style-src样式表:只信任http://cdn.example.org和http://third-party.org;

·Child-src:必须使用HTTPS协议加载。这个已从Web标准中删除,新版本浏览器可能不支持;

·其他资源:没有限制其他资源。

3.实战:

(1)Low:

  代码分析:

<?php

$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 ;"; // allows js from self, pastebin.com, hastebin.com, jquery and google analytics.

header($headerCSP);

# These might work if you can't create your own for some reason
# https://pastebin.com/raw/R570EE00
# https://www.toptal.com/developers/hastebin/raw/cezaruzeka

?>
<?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、hastebin.com、www.toptal.com、example.com、code.jquery.com、https://ssl.google-analytics.com。、

  我们开始尝试攻击,首先使用的是https://pastebin.com这个网站但是查阅资料后,发现可能这个网站是国外的网站,访问速度比较慢,所以不会出现弹窗。但是原理基本上差不多,所以我们还是按照原计划行事。

  首先打开https://pastebin.com,输入“alert(1);”,然后点击“Create New Paste”就可以得到下一步,点击“raw”,复制得到的网址。 

  然后将这个链接输入DVWA,就可以得到弹窗了,这里我也借用下人家成功的图片。 

(2)Medium:

  代码分析:

<?php

$headerCSP = "Content-Security-Policy: script-src 'self' 'unsafe-inline' 'nonce-TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=';";

header($headerCSP);

// Disable XSS protections so that inline alert boxes will work
header ("X-XSS-Protection: 0");

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

?>
<?php
if (isset ($_POST['include'])) {
$page[ 'body' ] .= "
    " . $_POST['include'] . "
";
}
$page[ 'body' ] .= '
<form name="csp" method="POST">
    <p>Whatever you enter here gets dropped directly into the page, see if you can get an alert box to pop up.</p>
    <input size="50" type="text" name="include" value="" id="include" />
    <input type="submit" value="Include" />
</form>
';

  unsafe-inline:当csp有Unsafe-inline时, 并且受限于csp无法直接引入外部js, 不过当frame-src为self, 或者能引入当前域的资源的时候, 即有一定可能能够引入外部js。nonce-source,仅允许特定的内联脚本块。所以直接输入源码内注释的内容即可。

(3)High:

  代码分析:

<?php
$headerCSP = "Content-Security-Policy: script-src 'self';";

header($headerCSP);

?>
<?php
if (isset ($_POST['include'])) {
$page[ 'body' ] .= "
    " . $_POST['include'] . "
";
}
$page[ 'body' ] .= '
<form name="csp" method="POST">
    <p>The page makes a call to ' . DVWA_WEB_PAGE_TO_ROOT . '/vulnerabilities/csp/source/jsonp.php to load some code. Modify that page to run your own code.</p>
    <p>1+2+3+4+5=<span id="answer"></span></p>
    <input type="button" id="solve" value="Solve the sum" />
</form>

<script src="source/high.js"></script>
';

  source/high.js:代码的主要逻辑还是在这一段,大致的意思就是,点击一个按钮会生成一个script的标签,该标签的src指向source/jsonp.php?callback=solveNum,然后把这个标签加入到DOM中。solveSum()函数传入参数obj,如果obj包含“answer”,远程加载的 solveSum({"answer":"15"}) 当作 js 代码执行,然后这个函数就会在界面适当的位置写入答案。可以看到src指向的source/jsonp.php?callback=solveNum未做任何XSS的过滤,直接F12修改high.js的源代码,可以看到也能成功获取cookie。

(4)Impossible:

  代码分析:

<?php

$headerCSP = "Content-Security-Policy: script-src 'self';";

header($headerCSP);

?>
<?php
if (isset ($_POST['include'])) {
$page[ 'body' ] .= "
    " . $_POST['include'] . "
";
}
$page[ 'body' ] .= '
<form name="csp" method="POST">
    <p>Unlike the high level, this does a JSONP call but does not use a callback, instead it hardcodes the function to call.</p><p>The CSP settings only allow external JavaScript on the local server and no inline code.</p>
    <p>1+2+3+4+5=<span id="answer"></span></p>
    <input type="button" id="solve" value="Solve the sum" />
</form>

<script src="source/impossible.js"></script>
';

  防御模板修复了 callback 参数可被控制问题,就没有 url 中的 callback 了,后台写死了。

标签:src,source,DVWA,js,callback,Bypass,com,CSP
From: https://www.cnblogs.com/wybsignal/p/17098017.html

相关文章

  • DVWA通关笔记(一)
    DVWA通关笔记SQL注入LOW1.寻找注入点?uid=1'----------------页面报错?uid=1’--+------------------页面正常则为单引号闭合2.判断列数?uid=1'orderby3-......
  • CSP201612-3权限查询
            多年后再回头看这道题觉得很简单,写起来还是很复杂,我的书写习惯不好,找bug找了很久。特别注意在构建角色时,一个角色可能会有多个权限,取最大值,又......
  • DVWA靶场实战(十二)——XSS(Stored)
    DVWA靶场实战(十二)五、XSS(Stored):1.漏洞原理:XSS的Stored被称作存储型XSS漏洞,漏洞的原理为语句被保存到服务器上,显示到HTML页面中,经常出现在用户评论的页面,攻击者将XS......
  • 【题解】[CSP-S2019] Emiya 家今天的饭
    题目分析:(我竟然可以独立做出来正赛的题,表示震惊)这个题面显然就很神仙,不好分析,我们进行转化一下题意:给定一个\(n\timesm\)的矩阵,对于每一行我们可以选择一个数也可以......
  • DVWA系列3:CSRF
    DVWA系列3:CSRF前言CSRF(Cross-siterequestforgery),即跨站请求伪造,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。比如说,用户之前登录了网银网......
  • [转]dvwa安装、配置、使用教程(Linux)
    本文转自:https://www.cnblogs.com/lsdb/p/6826519.html一、搭建LAMP环境首先搭建好LAMP环境,如没配好参见“Linux+Apache+MySQL+PHP配置教程”或者使用官方推荐的XAMPP:h......
  • NOIP/CSP 树论题目口胡
    我们假设你已经熟练掌握了树上的各项基础技术.下面来做一下题吧!1.[NOIP2007提高组]树网的核简明题意:给定一棵有\(n\)个结点的带权无根树,在其直径上找到一段长......
  • DVWA靶场实战(十一)——XSS(Reflected)
    DVWA靶场实战(十一)十一、XSS(Reflected):1.漏洞原理:XSS被称为跨站脚本攻击(CrossSiteScript),而Reflected被称作反射型XSS。不同于DOM和Stored,Reflected反射型无法存储......
  • DVWA靶场实战(十)——XSS(DOM)
     DVWA靶场实战(十) 五、XSS(DOM):1.漏洞原理:XSS全称为CrossSiteScripting,由于和层叠样式表(CascadingStyleSheets,CSS)重名,所以为了区别别叫做XSS。主要基于Java......
  • DVWA靶场实战(九)——Weak Session IDS
    DVWA靶场实战(九)九、WeakSessionIDS:1.漏洞原理:WeakSessionIDS也叫做弱会话,当用户登录后,在服务器就会创造一个会话(session),叫做会话控制,接着访问页面的时候就不用......