DVWA靶场实战(十三)——CSP Bypass
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 了,后台写死了。
DVWA靶场实战(十三)——CSP Bypass的更多相关文章
- DVWA靶场实战(五)——File Upload
DVWA靶场实战(五) 五.File Upload: 1.漏洞原理: File Upload中文名叫做文件上传,文件上传漏洞是指用户上传了一个可执行脚本文件(php.jsp.xml.cer等文件),而 ...
- DVWA靶场实战(四)——File Inclusion
DVWA靶场实战(四) 四.File Inclusion: 1.漏洞原理: 随着网站的业务的需求,程序开发人员一般希望代码更加灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通 ...
- DVWA靶场实战(三)——CSRF
DVWA靶场实战(三) 三.CSRF: 1.漏洞原理: CSRF(Cross-site request forgery),中文名叫做"跨站请求伪造",也被称作"one c ...
- DVWA靶场实战(二)——Command Injection
DVWA靶场实战(二) 二.Command Injection: 1.漏洞介绍: Command Injection,中文叫做命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令 ...
- DVWA靶场实战(一)——Brute Force
DVWA靶场实战(一) 一.Brute Force: 1.漏洞原理: Brute Force是暴力破解的意思,大致原理就是利用穷举法,穷举出所有可能的密码. 2.攻击方法: Burpsuite中的In ...
- DVWA靶场实战(六)——Insecure CAPTCHA
DVWA靶场实战(六) 六.Insecure CAPTCHA: 1.漏洞原理: Insecure CAPTCHA(不安全的验证码),CAPTCHA全程为Completely Automated Pub ...
- DVWA靶场实战(七)——SQL Injection
DVWA靶场实战(七) 七.SQL Injection: 1.漏洞原理: SQL Inject中文叫做SQL注入,是发生在web端的安全漏洞,主要是实现非法操作,例如欺骗服务器执行非法查询,他的危害在 ...
- DVWA靶场实战(九)——Weak Session IDS
DVWA靶场实战(九) 九.Weak Session IDS: 1.漏洞原理: Weak Session IDS也叫做弱会话,当用户登录后,在服务器就会创造一个会话(session),叫做会话控制,接 ...
- DVWA靶场实战(十)——XSS(DOM)
DVWA靶场实战(十) 五.XSS(DOM): 1.漏洞原理: XSS全称为Cross Site Scripting,由于和层叠样式表(Cascading Style Sheets,CSS)重名,所以 ...
- DVWA靶场实战(十一)——XSS(Reflected)
DVWA靶场实战(十一) 十一.XSS(Reflected): 1.漏洞原理: XSS被称为跨站脚本攻击(Cross Site Script),而Reflected被称作反射型XSS.不同于DOM和S ...
随机推荐
- Pod的优雅上下线
Pod的优雅上下线依赖k8s的监控检查机制,以及 Pod lifecycle Hooks,通过这些kubernetes的机制,配合服务发现的流量管理机制,实现业务的优雅上下线. 基础概念 Pod 健康 ...
- Java工具类SignUtil
import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; impo ...
- find_package()使用指南
关于find_package() 在使用cmake引用第三方库(比如OpenCV)时,我们总是使用find_package()这个指令来实现对包的查找(比如find_package(OpenCV)). ...
- 如何快速的开发一个完整的iOS直播app(搭建Socket即时通讯服务器)
在直播中,聊天和发礼物,需要用到及时通讯技术,市面上的App大多数采用的都是第三方SDK,融云,环信等,但是本例子采用websocket搭建及时通讯服务器. 即时通讯 即时通讯(Instant mes ...
- Golang-反射10
http://c.biancheng.net/golang/reflect/ Go语言反射(reflection)简述 反射(reflection)是在 Java 出现后迅速流行起来的一种概念,通过反 ...
- w3cschool-Go 教程
https://www.w3cschool.cn/go/ Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pi ...
- 【Git】---工作区、暂存区、版本库、远程仓库
工作区.暂存区.版本库.远程仓库 一.概念 1.四个工作区域 Git本地有四个工作区域:工作目录(Working Directory).暂存区(Stage/Index).资源库(Repository或 ...
- springBoot(2)--初步理解
一.定时任务 1.步骤: 1:在启动类上写@EnableScheduling注解 2:在要定时任务的类上写@component 3:在要定时执行的方法上写@Scheduled(fixedRate=毫秒 ...
- Java01-基础入门(准备工作)
从零开始开发Java的第一个程序: [ 任务列表 ] 最新的程序开发手段 Java是什么 Java开发工具 JDK的卸载,下载及安装 JDK配置环境变量 命令行运行第一个Java程序 Java开发工具 ...
- linxu7下安装pacemaker+corosync集群-01
1.yum仓库的配置-自行配置 2.安装软件包: yum -y install pacemaker* corosync* pcs* psmisc yum -y install pcs fence-ag ...