DVWA 靶场 CSP Bypass 通关解析

前言

DVWA代表Damn Vulnerable Web Application,是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序,旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。

DVWA提供了一系列的漏洞场景和练习环境,用户可以通过攻击这些漏洞场景来学习和实践漏洞利用技术。这些漏洞包括常见的安全问题,如SQL注入、跨站脚本攻击(XSS)、文件包含漏洞等。通过攻击这些漏洞,用户可以了解漏洞的原理、影响和防御方法。

DVWA提供了不同的安全级别,从低到高,以满足不同技能水平的用户需求。用户可以根据自己的能力选择适当的安全级别,并进行相应的练习和挑战。

DVWA还提供了一些额外的功能和工具,如Web代理、密码破解、弱密码检测等,以帮助用户更好地理解和处理漏洞问题。

总之,DVWA是一个用于学习和练习Web应用程序漏洞的开源应用程序。它提供了一系列的漏洞场景和练习环境,帮助安全专业人员和爱好者提高对Web应用程序安全的理解和实践能力。通过使用DVWA,用户可以加深对Web应用程序漏洞的认识,并学习如何有效地保护Web应用程序免受攻击

介绍

内容安全策略(Content Security Policy,CSP)是一种用于防止跨站脚本(XSS)和其他代码注入攻击的安全机制。通过设定 CSP 头,网站可以指定哪些资源可以加载和执行。然而,即使有 CSP,攻击者有时仍然能找到方法绕过这些策略进行攻击。以下是对 CSP 绕过(CSP Bypass)的详细介绍,包括其原理、常见技术、攻击手法、防御措施以及实例分析。

一、CSP 绕过原理

CSP 绕过的核心在于找到策略配置中的漏洞或利用其他技术手段,使恶意代码能够在受保护的网站上执行。常见的 CSP 绕过原因包括:

  • 策略配置错误:策略过于宽松或存在配置错误。
  • 浏览器实现漏洞:浏览器对 CSP 实现中的漏洞。
  • 资源注入:利用不受 CSP 控制的资源进行攻击。

二、常见技术和攻击手法

  1. 策略配置错误

    • 宽松的 default-src:允许来自不安全来源的资源加载。
    • 过多的 unsafe-inlineunsafe-eval:允许内联脚本和字符串解析为代码。
    • 不适当的资源域名白名单:包含潜在不安全的域名。
  2. 数据注入

    • JSONP:利用 JSONP 响应执行代码。
    • 跨域资源:在宽松的 CSP 策略中,利用跨域资源进行代码执行。
  3. 混合内容

    • HTTP 和 HTTPS 混合:利用 HTTP 加载不受信任的脚本。
  4. DOM XSS

    • DOM 操作漏洞:利用不安全的 DOM 操作,如 innerHTMLeval,等。
  5. 服务端漏洞

    • 服务器端渲染注入:在服务器端生成内容时存在注入漏洞。

三、防御措施

  1. 严格的 CSP 配置

    • 最小特权原则:只允许加载和执行必需的资源。
    • 避免 unsafe-inlineunsafe-eval:尽可能避免使用这些指令。
    • 详细指定资源来源:明确指定允许加载资源的来源,不使用通配符(*)。
  2. 输入验证和输出编码

    • 验证和清理用户输入:防止恶意数据进入页面。
    • 正确编码输出:确保输出数据不会被浏览器解析为代码。
  3. 监控和报告

    • CSP 报告机制:启用 CSP 报告,将策略违规行为发送到指定服务器以进行监控和修复。
  4. 安全开发实践

    • 使用安全库和框架:选择安全的开发库和框架,避免直接操作 DOM。
    • 安全审计:定期进行代码审计和安全测试,发现和修复潜在漏洞。

一、Low

源码对 HTTP 头定义了 CSP 标签,从而定义了可以接受外部 JavaScript 资源的白名单,通过抓包也可以知道是哪些网站

可以先用它给出了网址实验一波 

效果如下,通过加载外界的 JS 实现 XSS 攻击

二、Medium

这一关禁用了外部加载,所以要采用内联

源码如下,HTTP 头信息中的 script-src 的合法来源发生了变化。script-src 还可以设置一些特殊值,unsafe-inline 允许执行页面内嵌的 <script> 标签和事件监听函数,nonce 值会在每次 HTTP 回应给出一个授权 token。 

<?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>
';

通过内联 JavaScript 代码,注入时直接令 nonce 为设定好的值即可 

三、High

这一关没有输入框,点击按钮计算数值

在网络中查看源码

function clickButton() {var s = document.createElement("script");s.src = "source/jsonp.php?callback=solveSum";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();});
}

源码分析推测 callback 存在注入点,抓包后更改参数实现 XSS 攻击

攻击成功!!! 

 

四、结论

CSP 是一种强大的防御机制,可以有效防止 XSS 和其他代码注入攻击。然而,配置不当或依赖不安全的资源可能导致 CSP 被绕过。通过严格的 CSP 配置、输入验证和输出编码、安全开发实践以及定期安全测试,可以增强网站的安全性,防止 CSP 绕过攻击。开发者应深入理解 CSP 的工作原理和潜在的攻击手法,以构建更安全的网络应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/356479.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高速公路声光预警定向广播助力安全出行

近年来&#xff0c;高速重大交通事故屡见不鲜&#xff0c;安全管控一直是高速运营的重中之重。如何利用现代化技术和信息化手段&#xff0c;创新、智能、高效的压降交通事故的发生概率&#xff0c;优化交通安全管控质量&#xff0c;是近年来交管部门的主要工作&#xff0c;也是…

STM32人工智能检测-筛选机器人

前言 本文描述了一种使用STM32进行机器人筛选的办法。筛选对象是我的粉s&#xff0c;删选办法是瞪眼法。 问题现象 每次当我的STM32 向外界发出一篇新的的报文&#xff0c;总能在1H之内得到focus&#xff0c;格式如下 [title][body][tail]于是我对各个focus 我报文的对象进…

Flask之模板

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 目录 一、模板的基本用法 1.1、创建模板 1.2、模板语法 1.3、渲染模板 二、模板辅助工具 2.1、上下文 2.2、全局对象 2.3、过滤器 2.4、测试…

C语言| 数组倒置算法

数组倒置 方法一 1 定义两个数组a[5] b[5],两个循环变量i j 2 用for循环&#xff0c;把数组a的最后一个数&#xff0c;赋值给数组b第一个元素 3 输出数组b 【程序代码】 #include <stdio.h> int main(void) { int a[5] {11, 22, 33, 44, 55}; int b[5]; …

进程、线程的区别

进程、线程的关系 开工厂生产手机&#xff0c;制作一条生产线&#xff0c;这个生产线上有很多的器件以及材料。一条生产线就是一个进程。 只有生产线是不够的&#xff0c;使用找五个工人来进行生产&#xff0c;这个工人能够利用这些材料最终一步步的将手机做出来&#xff0c;这…

内外网映射访问内网服务器

如果本地有公网ip&#xff0c;比如连接的宽带有公网ip&#xff0c;可以直接通过路由配置转发就行了&#xff0c;如果本地没有公网ip&#xff0c;那就需要通过下面这种方式来访问内网服务器了。 1&#xff1a;首先内网服务器需要连接外网&#xff0c;可以通过网线或者WiFi都可以…

RabbitMQ实践——交换器(Exchange)绑定交换器

在《RabbitMQ实践——交换器&#xff08;Exchange&#xff09;和绑定&#xff08;Banding&#xff09;》一文中&#xff0c;我们实验了各种交换器。我们可以把交换器看成消息发布的入口&#xff0c;而消息路由规则则是由“绑定关系”&#xff08;Banding&#xff09;来定义&…

【JUC并发编程】

Java并发常见面试题总结&#xff08;上&#xff09; 线程 什么是线程和进程? 何为进程? 进程是程序的一次执行过程&#xff0c;是系统运行程序的基本单位&#xff0c;因此进程是动态的。系统运行一个程序即是一个进程从创建&#xff0c;运行到消亡的过程。 在 Java 中&am…

Docker 搭建 MinIO 对象存储

Docker 搭建 MinIO 对象存储 一、MinIO MinIO 是一个高性能的对象存储服务器&#xff0c;用于构建云存储解决方案。MinIO 允许你存储非结构化数据&#xff08;如图片、视频、日志文件等&#xff09;以对象的形式。MinIO 提供简单的部署选项和易于使用的界面&#xff0c;允许你…

深度神经网络——什么是降维?

引言 什么是降维&#xff1f; 降维是用于降低数据集维度的过程&#xff0c;采用许多特征并将它们表示为更少的特征。 例如&#xff0c;降维可用于将二十个特征的数据集减少到仅有几个特征。 降维通常用于无监督学习任务 降维是一个用于降低数据集维度的过程&#xff0c;采用许…

【Mysql服务无法启动,使用 ibd数据文件恢复数据方法(windows版本)】

Mysql服务无法启动&#xff0c;使用 ibd数据文件恢复数据方法&#xff08;windows版本&#xff09; 前置条件 1.需要安装python3环境 2.查询本地python版本命令 python --version一&#xff1a;工具下载 1.github工具下载链接&#xff1a; https://github.com/ddcw/ibd2sql…

C语言| 数组倒置II

数组倒置第二种方法&#xff1a;直接在数组内进行倒置 第一个元素和最后一个元素交换&#xff0c; 第二个元素和倒数第二个元素交换 第三个元素和倒数第三个元素交换...... 数组元素个数为偶数&#xff0c;每个元素都能交换一次&#xff1b; 数组元素个数为奇数&#xff0c;最…

如何为自己的项目生成changelog

背景 在github上看到人家的更新日志感觉很cool&#xff0c;怎么能给自己项目来一套呢 环境信息 tdstdsdeMacBook-Pro demo-doc % node -v v14.18.1 tdstdsdeMacBook-Pro demo-doc % npm -v 6.14.15硬件信息 型号名称&#xff1a;MacBook Pro版本&#xff1a; 12.6.9芯片&…

Excel导出实例

在上一节的基础上&#xff0c;本文演示下如何导出excel数据。 Excel导出操作演示 继承ocean-easyexcel SDK <dependency><groupId>com.angel.ocean</groupId><artifactId>ocean-easyexcel</artifactId><version>1.0.0</version> …

2024-6-18(沉默Spring,Springboot)

1.Spring小结 我们最后再来体会一下用 Spring 创建对象的过程&#xff1a; 通过 ApplicationContext 这个 IoC 容器的入口&#xff0c;用它的两个具体的实现子类&#xff0c;从 class path 或者 file path 中读取数据&#xff0c;用 getBean() 获取具体的 bean instance。 那…

兴顺物流管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;驾驶员管理&#xff0c;物流资讯管理&#xff0c;车辆管理&#xff0c;基础数据管理 员工账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;物流资讯管理&…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验7 虚拟局域网VLAN

一、实验目的 1.学习如何划分VLAN&#xff1b; 2.验证划分VLAN的作用&#xff1b; 3.学习如何用命令行创建VLAN&#xff0c;将端口划分到VLAN&#xff0c;设置端口类型。 二、实验要求 1.使用Cisco Packet Tracer仿真平台&#xff1b; 2.观看B站湖科大教书匠仿真实验视频&am…

PageOffice国产版在线编辑word文件

PageOffice国产版支持统信UOS、银河麒麟等国产操作系统。调用客户端WPS在线编辑word、excel、ppt等文件。在线编辑效果与本地WPS一致。如图所示&#xff1a; web系统集成pageofficeV6.0国产版的文档&#xff1a;PageOfficeV6.0国产版最简集成代码(Springboot) PageOffice最简集…

当flex-direction: column时,设置flex:1不生效解决办法

当需求是: 页面纵向排列,且最后一个元素撑满剩余高度 flex:1在横向排列时是可以的,但是纵向排列会失效,此时需要给最后一个子元素设置align-self: stretch;即可撑满剩余高度 <div class"father"><div class"child child1"></div><div…

短视频批量下载工具源码逻辑解析(软件)

短视频批量提取第三篇关于视频提取下载的思路 一&#xff1a;概述 因为上一篇不完整&#xff0c;这里其实就是补充第二篇关于源码思路。这里不针对视频评论的提取&#xff0c;只对视频分享链接批量导入下载进行思路解析 二&#xff1a;难点 通常情况下如果直接访问详情页进行…