首页 > 其他分享 >DVWA-CSP Bypass

DVWA-CSP Bypass

时间:2024-05-30 18:04:00浏览次数:15  
标签:DVWA CSP callback Bypass jsonp js php page

CSP 的主要目标是减少和报告 XSS 攻击。XSS 攻击利用了浏览器对于从服务器所获取的内容的信任。恶意脚本在受害者的浏览器中得以运行,因为浏览器信任其内容来源,即使有的时候这些脚本并非来自于它本该来的地方。

CSP 通过指定有效域——即浏览器认可的可执行脚本的有效来源——使服务器管理者有能力减少或消除 XSS 攻击所依赖的载体。一个 CSP 兼容的浏览器将会仅执行从白名单域获取到的脚本文件,忽略所有的其他脚本(包括内联脚本和 HTML 的事件处理属性)。

Low

观察后端代码,设置了CSP规则,只允许加载白名单域名的文件。
本是用https://pastebin.com的,但是我这里一直不弹窗。我就直接在服务器上写了个js文件,因为CSP规则有self,可以加载本身域名的文件的。

<?php

$headerCSP = "Content-Security-Policy: script-src 'self' https://pastebin.com hastebin.com www.toptal.com example.com code.jquery.com https://ssl.google-analytics.com https://digi.ninja ;"; // allows js from self, pastebin.com, hastebin.com, jquery, digi.ninja, and google analytics.

header($headerCSP);

# These might work if you can't create your own for some reason
# https://pastebin.com/raw/R570EE00
# https://www.toptal.com/developers/hastebin/raw/cezaruzeka

?>
<?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>
<p>
	As Pastebin and Hastebin have stopped working, here are some scripts that may, or may not help.
</p>
<ul>
	<li>https://digi.ninja/dvwa/alert.js</li>
	<li>https://digi.ninja/dvwa/alert.txt</li>
	<li>https://digi.ninja/dvwa/cookie.js</li>
	<li>https://digi.ninja/dvwa/forced_download.js</li>
	<li>https://digi.ninja/dvwa/wrong_content_type.js</li>
</ul>
<p>
	Pretend these are on a server like Pastebin and try to work out why some work and some do not work. Check the help for an explanation if you get stuck.
</p>
';

在这里插入图片描述
在这里插入图片描述
会出现弹窗

Medium

观察后端代码,此CSP允许来自自身和内联脚本(HTML 文档中直接包含的 JavaScript 代码),但是内联脚本必须包含指定的nonce,这里nonce是固定的,一般是一个单次使用的字符串(内敛脚本的nonce通过CSP才可以执行)。
这里绕过的话直接插入一个nonce为TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=的脚本

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

<script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert("xss")</script>
在这里插入图片描述

High

观察代码
前端
high.js

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

后端
high.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>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>
';

jsonp.php

<?php
header("Content-Type: application/json; charset=UTF-8");

if (array_key_exists ("callback", $_GET)) {
	$callback = $_GET['callback'];
} else {
	return "";
}

$outp = array ("answer" => "15");

echo $callback . "(".json_encode($outp).")";
?>

涉及到了JSONP技术,可以了解一下。
执行过程:

  1. 用户点击按钮,调用clickButton()函数。
  2. clickButton 函数动态创建 <script> 标签,设置其 src 属性并将其添加到文档中。
  3. 之后浏览器请求source/jsonp.php?callback=solveSum
  4. jsonp.php处理请求并输出 solveSum({“answer”:15}); 作为响应。
  5. 浏览器接收到响应,执行返回的 JavaScript 代码 solveSum({“answer”:15});(使用JSONP,JSON响应数据是合法的JavaScript代码)。
  6. high.js定义的 solveSum 函数被调用,并更新页面显示的内容。
    关于攻击,我们发现jsonp.php的callback没有做任何过滤,我们就主动请求json.php把callback写为alert(“xss”),在echo $callback . "(".json_encode($outp).")";中,alert(“xss”)会被放在前端执行。
    如何请求json.php呢,在high.php中有接受POST的include参数,也没有任何过滤,我们可以直接向includePOST一个js语句,加载到前端,并执行去请求jsonp.php。
    payload为include=<script src="source/jsonp.php?callback=alert("xss");"></script>
    用hackbar提交POST请求
    在这里插入图片描述
    看下jsonp.php返回的数据
    在这里插入图片描述
    被前端执行(使用JSONP,JSON响应数据是合法的JavaScript代码,当它到达浏览器将执行它)。

Impossible

查看jsonp_impossible.php代码,发现没有callback参数了,JSON响应格式也是写死的。
前端收到JSON响应数据后也只能调用solveSum函数。

<?php
header("Content-Type: application/json; charset=UTF-8");

$outp = array ("answer" => "15");

echo "solveSum (".json_encode($outp).")";
?>

标签:DVWA,CSP,callback,Bypass,jsonp,js,php,page
From: https://blog.csdn.net/weixin_45436292/article/details/139325431

相关文章

  • DVWA-Weak Session IDs
    用户登录之后,服务端会创建一个session,里面存储用户的状态和相关信息。而为了缓和客户端的存储压力,客户端只存储一个session_id,一般session_id放在cookie中。如果session_id被劫持,黑客可以使用其登录直接登录到目标账户。题目有点没看懂拿HighLevel举例,只拿到PHPSESSID就......
  • CSP历年复赛题-P1075 [NOIP2012 普及组] 质因数分解
    原题链接:https://www.luogu.com.cn/problem/P1075题意解读:求n的两个素因子中较大的一个。解题思路:数论的简单题,关键在于要知道一定有一个素因子不超过sqrt(n),而另一个素因子必然大于或等于sqrt(n),这样才能减少枚举时间。100分代码:#include<bits/stdc++.h>usingnamespaces......
  • WEB安全:Content Security Policy (CSP) 详解
    ContentSecurityPolicy(CSP)是一种强大的网页安全机制,用于防止跨站脚本(XSS)和其他注入攻击。通过设置一系列的内容安全策略,CSP可以限制网页可以加载的资源,从而保护用户数据和网站的安全性。什么是XSS攻击?跨站脚本攻击(XSS)是一种常见的安全漏洞,攻击者通过注......
  • CSP历年复赛题-P1310 [NOIP2011 普及组] 表达式的值
    原题链接:https://www.luogu.com.cn/problem/P1310题意解读:+代表按位或运算,*代表按位与运算,给定一个没有填数字的表达式,要求结果为0的数字方案数。解题思路:下面一步一步,由浅入深的来解决本题思路一(20分做法):观察得知,20%的数据,只有10个符号,且没有括号,也就是对应数字最多11个,可以......
  • DVWA-SQL Injection (Blind)
    SQL盲注的两种主要形式是基于布尔的盲注和基于时间的盲注,本篇主要记录盲注的知识,基础知识可以参考DVWA-SQLInjectionLow首先进行注入点测试,此处是字符型注入布尔盲注攻击者通过注入条件语句,利用应用程序中基于布尔条件的判断来获取有关数据库内容的信息。攻击者可以尝......
  • CSP历年复赛题-P1308 [NOIP2011 普及组] 统计单词数
    原题链接:https://www.luogu.com.cn/problem/P1308题意解读:给定单词a,文本b,在b中找a的个数,并找a第一次出现的位置,注意b中任何位置可能含有多个连续空格。解题思路:通过双指针找b中每一个单词的首、尾位置i,j,与a进行一一比较即可。注意1:比较时不考虑大小写,可以统一转成小写字符tolo......
  • CSP历年复赛题-P1199 [NOIP2010 普及组] 三国游戏
    原题链接:https://www.luogu.com.cn/problem/P1199题意解读:人机轮流选将,电脑策略就是破坏可能和人已选能组成最大默契值的将,问人是否必胜,求出站的一对武将的默契值。解题思路:贪心题通常比较难以下手,经过分析,人肯定不可能选到每一行的最大默契值,因为电脑会破坏;进一步思考,那人能......
  • CCF-CSP真题《202403-1 词频统计》思路+python满分题解
    哇q(≧▽≦q),第一次写博客,请大家多多关照○| ̄|_ 看到没啥人提供202403的第一题解题思路及python代码,刚好写完,心血来潮想分享解题思路,就写下了这篇博客,有其他的编码版本,欢迎大家一起探讨呀(虽然我是算法菜鸟┗(T﹏T)┛,但有问题,我会尽力回答的!!!)好了废话不多说,上解题思路!大概想了......
  • 【CSP】202012-2 期末预测之最佳阈值
    2020年第21次CCF计算机软件能力认证  202012-2 期末预测之最佳阈值原题链接:期末预测之最佳阈值时间限制: 1.0秒空间限制: 512MiB目录题目背景题目描述输入格式输出格式样例1输入样例1输出样例1解释样例2输入样例2输出子任务解题思路AC代码期末预测之安......
  • CSP历年复赛题-P1190 [NOIP2010 普及组] 接水问题
    原题链接:https://www.luogu.com.cn/problem/P1190题意解读:n个人在m个水龙头排队接水,每个人接水量不同,接完水的排队的人可以接上,求总的接水时间。解题思路:1、先把前m个人安排在m个水龙头2、对于m后面的每一个人,都排在目前m个水龙头总接水时间最短的后面3、最后看m个水龙头最大......