DVWA CSP Bypass 通关解析

简介: DVWA CSP Bypass 通关解析

前言

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


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


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


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


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

介绍

JavaScript 是一类通过利用 JavaScript 代码执行或滥用其特性来进行的网络。这些可以用来窃取敏感信息、用户会话、执行恶意操作等。以下是几种常见的 JavaScript 攻击及其防御方法的详细介绍:

一、CSP 绕过原理

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

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

二、常见技术和手法

  1. 策略配置错误
  • 宽松的 default-src:允许来自不安全来源的资源加载。
  • 过多的 unsafe-inlineunsafe-eval:允许内联脚本和字符串解析为代码。
  • 不适当的资源域名白名单:包含潜在不安全的域名。
  1. 数据注入
  • JSONP:利用 JSONP 响应执行代码。
  • 跨域资源:在宽松的 CSP 策略中,利用跨域资源进行代码执行。
  1. 混合内容
  • HTTP 和 HTTPS 混合:利用 HTTP 加载不受信任的脚本。
  1. DOM XSS
  • DOM 操作:利用不安全的 DOM 操作,如 innerHTMLeval,等。
  1. 服务端
  • 服务器端渲染注入:在服务器端生成内容时存在注入。

三、防御措施

  1. 严格的 CSP 配置
  • 最小特权原则:只允许加载和执行必需的资源。
  • 避免 unsafe-inlineunsafe-eval:尽可能避免使用这些指令。
  • 详细指定资源来源:明确指定允许加载资源的来源,不使用通配符(*)。
  1. 输入验证和输出编码
  • 验证和清理用户输入:防止恶意数据进入页面。
  • 正确编码输出:确保输出数据不会被浏览器解析为代码。
  1. 监控和报告
  • CSP 报告机制:启用 CSP 报告,将策略违规行为发送到指定服务器以进行监控和修复。
  1. 安全开发实践
  • 使用安全库和框架:选择安全的开发库和框架,避免直接操作 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 的工作原理和潜在的手法,以构建更安全的网络应用。

相关文章
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
368 1
|
SQL 文字识别 安全
DVWA Insecure CAPTCHA 通关解析
DVWA Insecure CAPTCHA 通关解析
|
SQL 安全 PHP
DVWA File Inclusion 通关解析
DVWA File Inclusion 通关解析
|
存储 Shell Linux
OverTheWire Bandit 通关解析(下)
OverTheWire Bandit 通关解析(下)
|
安全 Linux Shell
OverTheWire Bandit 通关解析(中)
OverTheWire Bandit 通关解析(中)
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
885 140
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
534 2
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1388 29
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
558 4
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

推荐镜像

更多
  • DNS