DVWA靶场CSP Bypass (漏洞绕过) 漏洞通关及源码审计

news/2025/2/28 20:02:31/文章来源:https://www.cnblogs.com/GuijiH6/p/18669362

CSP Bypass

CSP Bypass(Content Security Policy Bypass)漏洞涉及的是绕过网站部署的内容安全策略(Content Security Policy,CSP)限制,从而执行潜在的恶意操作。CSP 是一种安全机制,用于防止跨站脚本(XSS)、数据注入攻击等。其通过限制网页能够加载和执行的内容来源来增强浏览器的安全性。

low

查看源码可以发现被信任的网站有https://pastebin.com、hastebin.com、www.toptal.com、example.com、code.jquery.com、https://ssl.google-analytics.com

打开https://pastebin.com,输入“alert(xss);”

然后点击“Create New Paste”就可以得到下一步

点击“raw”,复制得到的网址。

然后输入到输入框即可

源码审计

只允许来自https://pastebin.com example.com code.jquery.com https://ssl.google-analytics.com 这几个网站的js脚本

<?php
$headerCSP = "Content-Security-Policy: script-src 'self' https://pastebin.com  example.com code.jquery.com https://ssl.google-analytics.com ;"; // 允许从自身(self)、pastebin.com、example.com、code.jquery.com 和 google analytics 发送的 js 脚本。
header($headerCSP); // 设置响应头的内容安全策略。
# https://pastebin.com/raw/R570EE00 // 这是一个外部链接,可能是指向某个资源的地址。
?>
<?php
if (isset ($_POST['include'])) { // 检查表单是否提交$page['body'] .= "<script src='" . $_POST['include'] . "'></script> // 如果提交,获取输入的 URL,并将其作为脚本引入";
}
$page['body'] .= '
<form name="csp" method="POST"> // 创建一个表单,方法为 POST<p>You can include scripts from external sources, examine the Content Security Policy and enter a URL to include here:</p> // 提示用户可以输入外部脚本的 URL<input size="50" type="text" name="include" value="" id="include" /> // 输入框,用户输入的 URL<input type="submit" value="Include" /> // 提交按钮
</form>
';

medium

查看源码当csp有Unsafe-inline时, 并且受限于csp无法直接引入外部js, 不过当frame-src为self, 或者能引入当前域的资源的时候, 即有一定可能能够引入外部js。nonce-source,仅允许特定的内联脚本块,所以直接输入源码内注释的内容即可。

输入注释内容

源码审计

nonce参数定义了如果 CSP 上下文中定义了 nonce,则只有与该值匹配的内联脚本能够运行,其他不带或不匹配的脚本会被阻止,所以我们可以使用示例脚本来绕过

<?php
$headerCSP = "Content-Security-Policy: script-src 'self' 'unsafe-inline' 'nonce-TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=';"; // 设置内容安全策略,允许从自身、自定义内联脚本及具有特定随机数值的脚本。
header($headerCSP); // 设置响应头的内容安全政策。
// 禁用 XSS 保护,以便内联的警报框能够工作
header ("X-XSS-Protection: 0"); // 关闭跨站点脚本(XSS)保护。
# <script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert(1)</script> // 这是一个示例脚本,用于展示使用随机数值的内联脚本。
?>
<?php
if (isset ($_POST['include'])) { // 检查表单是否提交$page['body'] .= "" . $_POST['include'] . " // 如果提交,直接将用户输入的内容添加到页面中。";
}$page['body'] .= '
<form name="csp" method="POST"> // 创建一个表单,方法为 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>
';

high

注意这段代码source/jsonp.php?callback=solveSum

抓包修改

也是可以的

源码审计

服务器:

设置了只允许来自同源的脚本


复制代码<?php
$headerCSP = "Content-Security-Policy: script-src 'self';"; // 设定内容安全策略,只允许加载来自同源的脚本header($headerCSP); // 发送内容安全策略的 HTTP 头部?>
<?php
if (isset ($_POST['include'])) { // 检查是否有通过 POST 请求包含的内容
$page['body'] .= "" . $_POST['include'] . " // 将包含的内容添加到页面主体中
";
}
$page['body'] .= '
<form name="csp" method="POST"> // 创建一个表单,使用 POST 方法提交<p>该页面调用 ' . DVWA_WEB_PAGE_TO_ROOT . '/vulnerabilities/csp/source/jsonp.php 来加载一些代码。修改该页面以运行您自己的代码。</p> // 提示用户该页面会调用的 URL<p>1+2+3+4+5=<span id="answer"></span></p> // 显示一个简单的数学表达式<input type="button" id="solve" value="解答这个和" /> // 一个按钮,用于触发计算
</form><script src="source/high.js"></script> // 加载一个外部 JavaScript 文件
';

客户端:

s.src = "source/jsonp.php?callback=solveSum";设置了callback参数,并且密钥过滤,所以我们可以利用此参数绕过

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();});
}

impossible

源码审计

服务端:

csp只允许来自外部脚本

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

客户端:

 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();});
}

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

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

相关文章

为你的Blazor程序加入本地化多语言功能

本地化 本地化是为给定语言和地区定制应用程序的过程. BootstrapBlazor 组件允许您将其 UI 元素转换为所需的语言。这包括按钮、过滤器操作符属性等文本。组件内部默认使用当前请求 UI 文化语言,本文将向您展示如何在应用程序中使用此功能: BootstrapBlazor 组件库 简介 Boot…

2024ICPC(香港)游记

转自MyBlog 虽然2025了再写好像有点迟就是了。 day -180? 大一xdx太nb导致的,本来预估网络赛400有两场,600校内出线,结果被xdx搞成网络赛200有两场,400校内出线。632遗憾退场。 day -100? 老师给南京站争取了一个外卡,可惜20分罚时之差给了我们前一队。这么说去年邀请赛…

AVL树的插入

关于AVL树的插入,其实是一个比较复杂的问题,主要是在于他对于“旋转”这一概念,对于这一概念其实我感觉很多博主讲的都不是很明白,包括CHATGPT,也试了,但是也没有比较清楚的解释,他们主要集中在一种比较简单的情况,即没有任何子树的情况,如下所示 ​​ 对于这种最基本…

【事件分析】20250112-Usual 赎回机制调整事件

背景信息 https://docs.usual.money/ Usual 是一个聚合 RWA 的稳定币发行协议,经济模型中存在三种代币:USD0:Usual 发行的稳定币。 USD0++:USD0++ 是 USD0 的质押版本,为期4年,可获得 USUAL 代币奖励。 USUAL:Usual 协议的治理代币。事发缘由 https://usual.money/blog/…

痞子衡嵌入式:我评上了2024年度电子星球(eestar)最强大脑

今天收到了「电源网旗下电子星球」 颁发的 2024 年度最强大脑奖牌,这是电子星球第二年给痞子衡颁奖了。这个奖牌设计得非常用心,区别于去年奖牌只能捧在手上,今年痞子衡可以把奖牌挂脖子上出去拉风了。从23年8月开始,电子星球小编每个工作日会转发一篇痞子衡的技术原创文章…

React源码解析(1): JSX语法与react项目渲染过程

好家伙0.前言 由于工作的需要,我不得不入手了react的全家桶,曾经我的主要技术栈是vue。 从vue转到react,一开始我感到非常不适应,jsx的语法的不了解,react hooks的使用方式,react路由的配置。。。这一度让我十分难受 但在熟悉一段时间后,我逐渐领略到react的魅力,灵活的…

痞子衡嵌入式:我拿到了2024年度电子星球(eestar)最强大脑

今天收到了「电源网旗下电子星球」 颁发的 2024 年度最强大脑奖牌,这是电子星球第二年给痞子衡颁奖了。这个奖牌设计得非常用心,区别于去年奖牌只能捧在手上,今年痞子衡可以把奖牌挂脖子上出去拉风了。从23年8月开始,电子星球小编每个工作日会转发一篇痞子衡的技术原创文章…

使用嗅探大师(sniff master)进行手机端iOS抓包的配置步骤

一个强大的iOS端抓包工具,嗅探大师(sniff master),比市面上的一些抓包工具操作更简单。之前做网页端开发的时候找到一个抓包工具,嗅探大师,当时用来在Windows上面进行抓包,发现他在手机端iOS方面的抓包更为强大,而且还有HTTPS暴力抓包,无需设置代理,无需越狱,无需ro…

keycloak~巧用client-scope实现token字段和userinfo接口的授权

keycloak中的client-scope允许你为每个客户端分配scope,而scope就是授权范围,它直接影响了token中的内容,及userinfo端点可以获取到的用户信息,这块我们可以通过自定义scope/mapper,来实现粒度的控制,并且这个mapper可以控制添加到token,或者添加到userinfo端点,这两块…

.NET Core 委托原理解析

.NET Core 委托原理解析 在 .NET Core 中,委托(Delegate)是一种类型安全的函数指针,它允许你将方法作为参数传递给其他方法,或者将方法存储在变量中以便稍后调用。委托在事件处理、回调机制以及异步编程中非常有用。理解委托的运行原理对于掌握 .NET Core 的高级编程技巧至…

Ellyn-Golang调用级覆盖率&方法调用链插桩采集方案

在应用程序并行执行的情况下,精确获取单个用例、流量、单元测试走过的方法链(有向图)、出入参数、行覆盖等运行时数据,经过一定的加工之后,应用在覆盖率、影响面评估、流量观测、精准测试、流量回放、风险分析等研发效能相关场景。词语解释Ellyn要解决什么问题? 在应用程…

[megatron代码阅读] 1. 初始化和组网

以pretrain_gpt.py为例, 看megatron的整体逻辑. 本章主要包括megatron初始化相关逻辑, 核心函数为initialize_megatron, setup_model_and_optimizer两个 initialize_megatron parse_args 从argparse中直接读取超参数配置. 如学习率, 正则化等. 从环境变量中获取rank等 load_arg…