实验:DVWA-CSP Bypass(CSP绕过)
实验环境:
DVWA靶机:172.16.12.10 靶场用户名:admin 密码:123
windos攻击机:172.16.12.7
kali攻击机:172.16.12.30
实验步骤:
Content-Security-Policy是指HTTP返回报文头中的标签,浏览器会根据标签中的内容,判断哪些资源可以加载或执行。翻译为中文就是绕过内容安全策略。是为了缓解潜在的跨站脚本问题(XSS),浏览器的扩展程序系统引入了内容安全策略这个概念。原来应对XSS攻击时,主要采用函数过滤、转义输入中的特殊字符、标签、文本来规避攻击。CSP的实质就是白名单制度,开发人员明确告诉客户端,哪些外部资源可以加载和执行。开发者只需要提供配置,实现和执行全部由浏览器完成。
script-src脚本:只信任当前域名
object-src:不信任任何URL,即不加载任何资源
style-src样式表:只信任http://cdn.example.org和THIRDPARTY | 名古屋でWebのコンサルティング・ディレクションをしています。
child-src:必须使用HTTPS协议加载。这个已从Web标准中删除,新版本浏览器可能不支持。
其他资源:没有限制其他资源
当启用CSP后,不符合CSP的外部资源会被阻止加载。
两种方法可以启用CSP:
一种是通过HTTP相应头信息的Content-Security-Policy字段;
另一种是通过网页标签;
一、Low级
1、源码分析
<?php //script-src脚本:'self'只信任当前域名 //信任https://pastebin.com 、example.com code.jquery.com、//https://ssl.google-analytics.com$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
2、漏洞复现
复制生成的js代码链接,淡然这时候服务器需要和pastebin联网,也就是连外网
访问一下Pastebin.com - #1 paste tool since 2002!,可以在New Paste中写下代码,点击create去创建链接
点raw 形式(原生)来显示
出现如下页面,复制该链接 https://pastebin.com/raw/ZtdMgiNS
在CSP页面的输入框输入刚才的链接,成功弹窗
二、Medium级
1、源码分析
<?php//增加了nonce $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="r@nd0m">:)标记包含与CSP标头中指定的随机数匹配的随机数属性,则允许执行内联脚本或CSS 。随机数应为安全的随机字符串,并且不应重复使用。# <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,允许使用内联资源,如内联< script>元素,javascript:URL,内联事件处理程序(如onclick)和内联< style>元素。必须包括单引号。
nonce-source,仅允许特定的内联脚本块,nonce=“TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=”
2、漏洞复现
引用特定内联脚本,然后插入js代码alert(/xss/)
输入
<script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert(/xss/)</script> 成功弹窗
三、High级
1、源码分析
vulnerabilities/csp/source/high.php <?php // script-src 'self';, 只允许本界面加载的 javascript 执行 $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> ';
2、漏洞利用
因为上面会接收一个include参数,所以可以作为注入点,构造如下payload
include=<script src="source/jsonp.php?callback=alert('cobot');"></script>
打开浏览器,访问CSP,按F12调出hackbar,按load URL加载url
勾选Post data,填写刚才构造的payload
按Execute,成功弹窗
四、Impossible级
1、源码分析
vulnerabilities/csp/source/impossible.php <?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> '; vulnerabilities/csp/source/impossible.js function clickButton() {var s = document.createElement("script"); //这里不再允许传参s.src = "source/jsonp_impossible.php";document.body.appendChild(s); }function solveSum(obj) {if ("answer" in obj) {document.getElementById("answer").innerHTML = obj['answer'];} }var solve_button = document.getElementById ("solve");if (solve_button) {solve_button.addEventListener("click", function() {clickButton();}); } jsonp_impossible.php <?php header("Content-Type: application/json; charset=UTF-8"); $outp = array ("answer" => "15"); //写死了。。。 echo "solveSum (".json_encode($outp).")"; ?>
与high等级不同,impossible等级执行JSONP调用,但不使用callback参数,而是硬编码要调用的函数。CSP设置只允许本地服务器上的外部javascript,不允许内联代码。
可以看到,callback传参删除,原本为变量的地方写死了。。。
实验:DVWA-CSP Bypass(CSP绕过)相关推荐
- 一步一步学习DVWA渗透测试(CSP Bypass绕过内容安全策略)-第十二次课
小伙伴们,今天我们继续学习. Content-Security-Policy是指HTTP返回报文头中的标签,浏览器会根据标签中的内容,判断哪些资源可以加载或执行.翻译为中文就是绕过内容安全策略.是为了 ...
- DVWA 黑客攻防实战(十五) 绕过内容安全策略 Content Security Policy (CSP) Bypass
看到标题,是否有点疑惑 CPS 是什么东东.简单介绍一下就是浏览器的安全策略,如果 标签,或者是服务器中返回 HTTP 头中有 Content-Security-Policy 标签 ,浏览器会根据标签 ...
- PHP代码审计DVWA[CSP Bypass]
CSP Bypass 靶场搭建可用蓝易云服务器
- bypass csp学习
csp学习 环境测试: 2016年11月27日. chrome 版本 54.0.2840.98 (64-bit) firefox 版本 50.0 csp csp是为了缓解一些攻击,比如xss.csrf ...
- csp php,CSP学习笔记(持续学习更新)
CSP--Content Security Policy 大佬光辉照耀我-学习链接 百度百科:CSP指的是内容安全策略,为了缓解很大一部分潜在的跨站脚本问题,浏览器的扩展程序系统引入了内容安全策略(C ...
- CSP:CSP认证考试:202012-1(期末预测之安全指数)满分答案,Java版
CSP:CSP认证考试:202012-1(期末预测之安全指数)满分答案,Java版 一.题目: 二.Java满分答案 import java.util.Scanner;public class Mai ...
- CSP:CSP认证考试:202104-1(灰度直方图)满分答案,Java版
CSP:CSP认证考试:202104-1(灰度直方图)满分答案,Java版 一.题目: 二.Java满分答案 import java.util.ArrayList; import java.util. ...
- CSP:CSP认证考试:202109-2(非零段划分)70分答案,Java版
CSP:CSP认证考试:202109-2(非零段划分)70分答案,Java版 一.题目: 二.Java70分答案 import java.util.ArrayList; import java.uti ...
- CSP:CSP认证考试:202109-1(数组推导)满分答案,Java版
CSP:CSP认证考试:202109-1(数组推导)满分答案,Java版 一.题目: 二.Java满分答案 import java.util.ArrayList; import java.util.S ...
- CSP基础-CSP入门简介
CSP加密服务提供者(Cryptographic Service Provider)具有一下几个特点: CSP是真正执行密码运算的独立模块 物理上一个CSP由两部分组成:一个动态连接库,一个签名文件 ...
最新文章
- php mysql insert数组_PHP – MySQL编写的INSERT数组语句
- 【转】MySQL常用命令总结
- c++ 结构体地址 转换成ulong_零基础入门之结构体字节对齐
- 对于Activity的理解
- 一些我工作中经常使用的C4C ABSL代码片段
- 前端学习(3292):function
- android 通知灯 测试,Android灯光系统通知灯【转】
- flexible.js淘宝移动端rem自适应用法
- ws flv连接播放得测试代码
- 访问一下互联网中的IPV6主机
- 远程仓库之GitHub介绍
- 高中生计算机考试软件手机版,信考中学信息技术考试练习系统内蒙古高中版
- 电池SOC估计-EKF UKF
- python使用turtle库绘制一个100长度的十字架_哪个选项能够使用turtle库绘制一个半圆形?...
- A按键控制LED状态
- 浅论三维标注技术的重要性
- 命令行窗口光标消失问题解决
- Ubuntu安装wordpress教程
- 高老师的架构设计_隽语集(CC_1051)
- 最新勒索软件WannaCrypt病毒感染前清除处理及加固