实验环境

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绕过)相关推荐

  1. 一步一步学习DVWA渗透测试(CSP Bypass绕过内容安全策略)-第十二次课

    小伙伴们,今天我们继续学习. Content-Security-Policy是指HTTP返回报文头中的标签,浏览器会根据标签中的内容,判断哪些资源可以加载或执行.翻译为中文就是绕过内容安全策略.是为了 ...

  2. DVWA 黑客攻防实战(十五) 绕过内容安全策略 Content Security Policy (CSP) Bypass

    看到标题,是否有点疑惑 CPS 是什么东东.简单介绍一下就是浏览器的安全策略,如果 标签,或者是服务器中返回 HTTP 头中有 Content-Security-Policy 标签 ,浏览器会根据标签 ...

  3. PHP代码审计DVWA[CSP Bypass]

    CSP Bypass 靶场搭建可用蓝易云服务器

  4. bypass csp学习

    csp学习 环境测试: 2016年11月27日. chrome 版本 54.0.2840.98 (64-bit) firefox 版本 50.0 csp csp是为了缓解一些攻击,比如xss.csrf ...

  5. csp php,CSP学习笔记(持续学习更新)

    CSP--Content Security Policy 大佬光辉照耀我-学习链接 百度百科:CSP指的是内容安全策略,为了缓解很大一部分潜在的跨站脚本问题,浏览器的扩展程序系统引入了内容安全策略(C ...

  6. CSP:CSP认证考试:202012-1(期末预测之安全指数)满分答案,Java版

    CSP:CSP认证考试:202012-1(期末预测之安全指数)满分答案,Java版 一.题目: 二.Java满分答案 import java.util.Scanner;public class Mai ...

  7. CSP:CSP认证考试:202104-1(灰度直方图)满分答案,Java版

    CSP:CSP认证考试:202104-1(灰度直方图)满分答案,Java版 一.题目: 二.Java满分答案 import java.util.ArrayList; import java.util. ...

  8. CSP:CSP认证考试:202109-2(非零段划分)70分答案,Java版

    CSP:CSP认证考试:202109-2(非零段划分)70分答案,Java版 一.题目: 二.Java70分答案 import java.util.ArrayList; import java.uti ...

  9. CSP:CSP认证考试:202109-1(数组推导)满分答案,Java版

    CSP:CSP认证考试:202109-1(数组推导)满分答案,Java版 一.题目: 二.Java满分答案 import java.util.ArrayList; import java.util.S ...

  10. CSP基础-CSP入门简介

    CSP加密服务提供者(Cryptographic Service Provider)具有一下几个特点: CSP是真正执行密码运算的独立模块 物理上一个CSP由两部分组成:一个动态连接库,一个签名文件 ...

最新文章

  1. php mysql insert数组_PHP – MySQL编写的INSERT数组语句
  2. 【转】MySQL常用命令总结
  3. c++ 结构体地址 转换成ulong_零基础入门之结构体字节对齐
  4. 对于Activity的理解
  5. 一些我工作中经常使用的C4C ABSL代码片段
  6. 前端学习(3292):function
  7. android 通知灯 测试,Android灯光系统通知灯【转】
  8. flexible.js淘宝移动端rem自适应用法
  9. ws flv连接播放得测试代码
  10. 访问一下互联网中的IPV6主机
  11. 远程仓库之GitHub介绍
  12. 高中生计算机考试软件手机版,信考中学信息技术考试练习系统内蒙古高中版
  13. 电池SOC估计-EKF UKF
  14. python使用turtle库绘制一个100长度的十字架_哪个选项能够使用turtle库绘制一个半圆形?...
  15. A按键控制LED状态
  16. 浅论三维标注技术的重要性
  17. 命令行窗口光标消失问题解决
  18. Ubuntu安装wordpress教程
  19. 高老师的架构设计_隽语集(CC_1051)
  20. 最新勒索软件WannaCrypt病毒感染前清除处理及加固

热门文章

  1. 前端换肤功能如何实现
  2. 信号处理--常用术语
  3. 重学计算机(六、程序是怎么运行的)
  4. 常用设计模式系列(十)—装饰者模式
  5. matlab 如何使用mex
  6. 手机屏幕如何投屏到电脑显示器上?
  7. 阿里云服务器配置Tomcat
  8. 小米路由器的服务器无响应怎么回事,小米路由器常见问题与解决方法(高级功能) | 192路由网...
  9. 图卷积神经网络(GCN)综述与实现(PyTorch版)
  10. 计算机仿真工具软件,计算机仿真技术