代码编织梦想

CSP

CSP即content security policy(内容安全策略),通过设置策略指令来规定资源的加载来源,简单地说就是CSP可以规定页面能从哪些域(站点)加载资源,这里的资源包括js脚本、图片和音频等等。如图,可以在响应头中看到它的存在:
MDN文档对CSP解释的非常清楚。链接:MDN_CSP

Low

<?php

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

CSP设置了脚本的来源(script-src)只能是self(此页面所在的站点)、https://pastebin.com、example.com、code.jquery.com和https://ssl.google-analytics.com。那么,要绕过CSP,只能从这些站点入手,如果这些站点上的某一个页面能插入脚本代码,就把它加载进来。逐个检查站点,可以发现在https://pastebin.com这个站点可以自主编辑页面。
点击raw后,就可以生成一个包含脚本代码的页面。然后再引入到页面中,点击include成功弹框。
那为什么不直接闭合标签注入脚本代码?因为默认情况下,CSP禁止内联脚本(形如就是内联脚本)和事件处理属性中的代码(如οnerrοr=“code)”)。
如果要取消禁止,就设置指令为:script-src unsafe-inline。

Medium

<?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");
// 设置了这个头部,浏览器会检测到XSS,从而采取相应防御措施,但并非所有
// 浏览器都支持,例如Firefox就不支持。设置为 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>
';

仔细分析CSP,设置了"unsafe-inline"说明可以执行内联脚本,而"nonce-TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA="说明只有设置了nonce属性,并且属性值为"TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA="的script标签才能执行内联脚本。思路很清晰了,输入:,成功弹框。
这个nonce值可以在响应头中得到,它的作用跟token值有点类似,含有nonce值的script标签才能执行脚本,实际上这个nonce值应该要随机生成的,而不是固定的。

High

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

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

// 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).")";
?>

首先给"solve the sum"按钮注册一个"click"的监听事件,当点击这个按钮后,就会执行solveSum函数,这个函数的作用是创建一个script元素,其src属性为"…jsonp.php…",说明script元素的内部脚本是从jsonp.php加载进来的,然后在body元素中添加这个script元素,里面的脚本代码就会被执行。接下来看看jsonp.php代码,$callback值是GET方式传递的,它可以被控制,并且还原样返回。测试一下:
在这里插入图片描述跟Low级别一样,这些数据加载进来后,就是script元素内部的脚本,可以被执行。
在这里插入图片描述

Impossible

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

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

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

这级别修复了High级别中jsonp.php的小漏洞,不再用$callback接收参数值了,而是把"solveSum"写死在代码中,因此也就没有可利用的地方了。

总结

这几道题给出了一些绕过CSP的方法:
(1)仔细分析站点的CSP策略,检查它设置的来源是否可以修改其中的页面数据,嵌入脚本后把它加载进来即可;
(2)是否允许内联脚本,是否设置对应的nonce值,nonce值是否固定的。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shawdow_bug/article/details/125308170

【xss技巧拓展】————6、csp简介_fly_鹏程万里的博客-爱代码爱编程_unsafe-inline

摘要 Content Security Policy是一种web平台的安全机制,是为了减少xss漏洞而出现,这应该是现代web应用中顶级的安全漏洞。在本文中,我们仔细观察和考虑CSP的实际好处,也确定下现实世界中出现的可以导致94.72%的所有不同策略重大缺陷。 我们对互联网超过10亿个主机名大约1000亿的搜索引擎库,1680867台主机的CSP部署

web 安全漏洞之 xss 攻击-爱代码爱编程

编者说:作为JS系工程师接触最多的漏洞我想就是 XSS 漏洞了,然鹅并不是所有的同学对其都有一个清晰的认识。今天我们请来了@卢士杰 同学为我们分享他眼中的 XSS 漏洞攻击,希望能帮助到大家。 什么是 XSS 攻击 XSS(Cross-Site Scripting)又称跨站脚本,XSS的重点不在于跨站点,而是在于脚本的执行。XSS是

信息安全学习文章(web-security-learning)_fudo_yusei的博客-爱代码爱编程

由于自己很懒,很多知识点都没有自己去整理,想着自己不整理总有大佬总结整理了,所以我这里就将我平时看到的好的文章链接发出来,用来大家学习。资料全为转载仅供学习,如有侵权请告知立即删除。 我会不间断更新,本次更新时间为:201

Web漏洞总结: OWASP Top 10-爱代码爱编程

本文原创,更多内容可以参考: Java 全栈知识体系。如需转载请说明原处。 开发安全 - OWASP Top 10 在学习安全需要总体了解安全趋势和常见的Web漏洞,首推了解OWASP,因为它代表着业内Web安全漏洞的趋势。@pdai OWASP简介 OWASP(开放式web应用程序安全项目)关注web应用程序的安全。OWASP

常见的web攻击及防御手段-爱代码爱编程

目录 XSS(Cross Site Scripting)攻击 攻击方式 反射型 - URL参数注入存储型 - 存储DB后读取注入攻击危害防御手段 转义CSP (Content Security Policy)cookie HttpOnlyCSRF攻击 攻击原理攻击危害防御手段 禁止第三方网站携带cookieRef

2020-web前端-你不知道的你那些小知识点-http&ajax-爱代码爱编程

1.TCP/IP 的三次握手和四次挥手 三次握手: 第一次握手: 客户端向服务端发送 SYN 码数据包,表示客户端要求和服务端建立连接; 第二次握手: 服务端收到客户端的连接请求后,会发送 ACK 数据包给客户端, 表示你的连接 请求已经收到,询问客户端是否真的需要建立连接; 第三次握手:客户端收到 ACK 码以后会检验是否正确, 如

Web中间件常见安全漏洞总结-爱代码爱编程

IIS IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。IIS目前只适用于Windows系统,不适用于其他操作系统。解析漏洞IIS 6.X 基于文件名 该版本 默认会将 *.asp;.jpg 此种格式的文件名,当成Asp解析,原理

CSP内容安全策略基础版-爱代码爱编程

白屏问题 小伙伴业务中经常会遇到白屏问题,其中一大原因是资源被CSP策略拦截了,那么什么是CSP呢?遇到了此问题要如何解决呢?基础原理 什么是CSP? 内容安全策略 (CSP) 是一个策略,该策略可以定义哪些资源可以被当前的web页面加载。为什么要配置CSP? CSP 的主要目标是减少和报告 XSS (Cross Site Scripting)攻击

十二个常见的Web安全漏洞总结及防范措施-爱代码爱编程

前言 本篇文章部分摘要自《OWASP Top 10 2017》。 OWASP,开放式Web应用程序安全项目(Open Web Application Security Project)是一个组织,它提供有关计算机和互联网应用程序的公正、实际、有成本效益的信息。其目的是协助个人、企业和机构来发现和使用可信赖软件。 一、SQL注入 SQL注入即

常见21种漏洞编码安全规范及解决方案-爱代码爱编程

目录 常见21种漏洞编码安全规范 1.sql注入 1.1风险描述 SQL注入主要发生在应用程序数据库层面上。程序员在设计程序的时候,没有对用户的输入进行校验,含有特殊字符语句会被数据库误认为是正常的SQL指令而运行,从而使数据库受到攻击,可能导致数据被窃取、更改、删除,以及进一步导致网站被嵌入恶意代码等危害。 1.2漏洞示例 1.3解决方案

网络安全-常见的web攻击手段-爱代码爱编程

1、XSS Cross Site Scripting 跨站脚本攻击 XSS (Cross-Site Scripting),跨站脚本攻击,因为缩写和 CSS重叠,所以只能叫 XSS。跨站脚本攻击是指通过存在安全漏洞的Web⽹站注册⽤户的浏览器内运⾏⾮法的HTML标签或JavaScript进⾏的⼀种攻击。 跨站脚本攻击有可能造成以下影响: 利

XSS跨站脚本攻击漏洞-爱代码爱编程

XSS跨站脚本攻击漏洞 文章目录 XSS跨站脚本攻击漏洞0x01 XSS 背景0x02 XSS 概论利用XSS漏洞XSS攻击的类型反射型XSS:存储型XSS:DOM型XSS:0x03 最常见的cookies类型a.Session Cookieb.Persistent Cookiec.Secure cookied.HttpOnly Cookiee.

浏览器实战篇----浏览器安全概述-爱代码爱编程

浏览器安全概述 1. 揭秘浏览器1.1 同源策略1.2 HTTP首部1.3 标记语言HTMLXML1.4 CSS1.5 脚本JavaScriptVBScript1.6 DOM1.7 渲染引擎WebkitTridentGeckoBlink1.8 Geolocation(地理定位)1.9 Web存储1.10 跨域资源共享1.11 HTML52. 浏览器

msf制作windows客户端恶意软件获取shell过程_msf 生产恶意代码-爱代码爱编程

今天继续给大家介绍渗透测试相关知识,本文主要内容是MSF制作Windows客户端恶意软件获取SHELL。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强

web漏洞篇——跨站脚本攻击(xss)_xss攻击工具-爱代码爱编程

目录 一、XSS简述 1.1 什么是XSS 1.2 XSS分类 1.3 DOM XSS漏洞演示 二、XSS攻击进阶 2.1 初探XSS Payload 2.2 强大的XSS Payload 2.3 XSS攻击平台 2.4 XSS Worm 2.5 XSS构造技巧 2.6 反射型XSS利用技巧-回旋镖 2.7 Flash XSS