web漏洞挖掘指南-前端跨域漏洞

web漏洞挖掘指南

前端跨域漏洞

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉【入门&进阶全套282G学习资源包免费分享!】

一、何为跨域

1.设想一种场景,一个恶意网站上嵌入了一个iframe标签去加载银行的登陆页面,高度和宽度的设置和真实的银行官网一样,当用户访问恶意网站并登录时,攻击者就可以利用恶意脚本通过XMLHttpRequest之类的dom操作窃取用户的银行卡数据,为了防止防御此类攻击,同源策略诞生了!

2.同源策略规定不同域的客户端脚本如果没有明确授权允许执行,不能读写另一方的资源。同协议,同端口,同主机名的两个URL才能被认为同源。

3.随着web应用前后端分离模式的流行,后端开发写完业务功能的代码后需要提供接口给前端用,而前后端域名往往是不一致的,这时请求就会被同源策略限制,为了更方便地共享这些的跨域资源,开发者们又设计出了CORS、jsonp等方式来完成跨域请求。

二、跨域请求发生的场景

1.其实除了前后端分离的场景需要实现跨域请求,也会有其他常见的场景要用到跨域请求:

2.某集团的非主营业务需要调用主站用户的账号信息,并将其数据显示出来

3.某宝、某东需要从第三方物流公司调用运单详情

4.本地开发程序时,本地文件夹不是在域名下面,要测试接口功能时可能需要发送ajax请求,这时也需要用到跨域请求

5.加载第三方网站上的图片,css样式,js等资源,有三个标签可以直接跨域访问这类资源:、、

三、CORS跨域漏洞

1.CORS,跨域资源共享(Cross-origin resource sharing),这种机制通过添加HTTP字段的方式规定服务器资源允许被哪些域访问(Access-Control-Allow-Origin)、请求中是否允许发送cookie(Access-Control-Allow-Credentials)、哪些请求类型是被允许的(Access-Control-Request-Method)等等。

2.其中最为重要的是Access-Control-Allow-Origin标头,当这一字段设置为 时表示服务器资源允许被任何域访问,当然如果需要请求用户信息这类的资源,cookie也是必须带上的,所以Access-Control-Allow-Credentials字段值要设置成true。但是当如果配置成Access-Control-Allow-Origin:* Access-Control-Allow-Credentials: true ,这种会被浏览器默认禁止导致无法利用,最好利用的配置可以参考如下请求:
在这里插入图片描述
3.如果将Origin请求头改为evil.cn,响应头中有Access-Control-Allow-Origin头,并允许evil.cn读取cookie访问服务器资源,这类配置往往是存在跨域配置错误且最好利用的。

4.综上所述,不难发现CORS跨域漏洞出现的请求包特征,burp中可以自动添加Origin头去寻找CORS配置错误,勾选如下默认配置→history中筛选带有cors配置错误的特征即可:

在这里插入图片描述
5.当然,网上也有师傅写了自动搜集CORS请求的burp插件,可以对history中的请求先做一个过滤,后续再做利用:[https://github.com/p1g3/JSONP-Hunter][0] ,使用方法可参考Tips:[https://zone.huoxian.cn/d/318-burpjsonpcors][1]。xray也可以扫描这类漏洞,但是很少用xray去扫,因为很多cors请求读取的并不是敏感信息,这类漏洞交到SRC大概率是要被忽略的,我们需要人工判断响应数据中的数据是否足够敏感,xray默认配置即可扫描CORS:

在这里插入图片描述
6.发现存在错误配置的CORS请求后,还需考虑请求是否有refer校验,因为跨域漏洞的触发和csrf是类似的,需要通过交互让受害者访问我们的恶意脚本,如果因为refer校验不通过还需要进一步bypass。这也是大多数SRC让提供有效poc的原因。js代码编写经验较少的师傅可以用工具生成poc:[https://github.com/0verSp4ce/PoCBox][0],本地搭建好后在图示处填入相关数据后即可生成poc code,可以选择online test,也可以将poc code保存为html后本地访问,验证是否可以读取响应数据:

在这里插入图片描述

四、jsonp跨域漏洞

1.相较CORS跨域而言,jsonp跨域算老方法了,浏览器兼容性比较好,他发送的不是ajax请求,而是利用了

2.从jsonp跨域的实现方式来看,其请求过程就不难理解了。服务器先封装好一个回调函数,客户端通过类似调用脚本的方式传递一个callback参数给服务端,来调用跨域服务器上动态生成的json后缀文件,服务端返回数据时会将这个callback参数作为函数名来包裹住json数据,这样客户端就可以通过函数名来获取对应的数据了。

3.综上所述,不难发现,jsonp跨域请求过程中,回调函数起着至关重要的作用,我们可以通过回调函数名的特征去寻找jsonp请求,如:callback,cb,jsonpCallback,jsonpcb等等。网上也有写好的burp插件来完成jsonp请求收集的步骤:https://github.com/p1g3/JSONP-Hunter/blob/master/Jsonp_Hunter.py 使用参考Tips:https://zone.huoxian.cn/d/318-burpjsonpcors 图示处可自定义回调函数名等特征:

在这里插入图片描述
4.jsonp请求如果没有用refer进行限制,是可以被用来劫持的,同样可以用PoCBox生成POC进行漏洞验证和利用,以下为利用jsonp读取用户信息实例: 接口地址:http://xxx/user/getUserInfo?callback=jQuery224001622079386685593_1628667945545&uid=xxx

5.online test:
在这里插入图片描述

五、前端跨域漏洞与CSRF的区别

1.刚开始学跨域漏洞时,我也会有同样的疑问,网上对于同源策略限制的解释众说纷纭,有的说SOP是用来防XSS和CSRF的,当然更多的是说限制跨域请求的,基于安全考虑,当前域不能访问其他域的资源。那么同源策略到底能不能防止CSRF呢?

2.说说我的个人看法:说到底,同源策略只是一种限制策略,并不是禁止请求,如果有恶意脚本请求了跨域资源,那么同源策略会拦截掉响应数据,让其无法对数据进行读取。然而,csrf漏洞的本质其实是伪装成受害者去完成请求,能不能读取返回数据并不重要。如果这样说很难理解,也可以结合漏洞场景来看:

3.常见跨域漏洞的请求:读取用户信息、调用第三方平台数据。

4.常见CSRF漏洞的请求:密码重置、修改用户信息、银行转账。

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉【入门&进阶全套282G学习资源包免费分享!】

网络安全工程师(白帽子)企业级学习路线

第一阶段:安全基础(入门)

在这里插入图片描述

第二阶段:Web渗透(初级网安工程师)

在这里插入图片描述

第三阶段:进阶部分(中级网络安全工程师)

在这里插入图片描述

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉【入门&进阶全套282G学习资源包免费分享!】

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

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

相关文章

优化大型机床装配调度:项目管理软件的应用方法

最近,Zoho Projects项目管理软件的一位资深客户,跟我们分享了他是如何把Projects应用于大型机床装配的复杂调度。小Z觉得特别有必要,把各行各业的成功应用和实践经验发布出来。在取得这位资深用户同意后,我们推出了本篇文章&#…

vcruntime140.dll如何修复,五种修复vcruntime140.dll方法分享

当我们在运行某些程序时,可能会遇到“找不到VCRuntime140.dll”的错误。这个错误通常表示我们的系统中缺少某个重要的动态链接库文件,而VCRuntime140.dll正是其中之一。本文将详细介绍如何修复这个问题。 一、问题出现的原因 首先,我们需要了…

2.3 如何使用FlinkSQL读取写入到JDBC(MySQL)

1、JDBC SQL 连接器 FlinkSQL允许使用 JDBC连接器&#xff0c;向任意类型的关系型数据库读取或者写入数据 添加Maven依赖 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-jdbc</artifactId><version>3.1…

MySQL双主一从高可用

MySQL双主一从高可用 文章目录 MySQL双主一从高可用环境说明1.配置前的准备工作2.配置yum源 1.在部署NFS服务2.安装主数据库的数据库服务&#xff0c;并挂载nfs3.初始化数据库4.配置两台master主机数据库5.配置m1和m2成为主数据库6.安装、配置keepalived7.安装部署从数据库8.测…

用 JHipster Azure Spring Apps 构建和部署 Spring 应用

作者&#xff1a;Hang Wang 排版&#xff1a;Alan Wang 此教程将向您展示如何使用 React、Spring Boot 和 PostgreSQL 在 Azure 上构建和部署全栈 Web 应用程序&#xff0c;由 JHipster Azure Spring Apps 提供支持。 JHipster Azure Spring Apps 为全栈 Web 开发提供了全面的…

虚拟现实VR技术在医疗行业的应用介绍

虚拟现实 (VR) 虽然经常与游戏联系在一起&#xff0c;但不可否认&#xff0c;未来科技少不了虚拟现实&#xff0c;其应用可以彻底改变许多行业。在医疗领域&#xff0c;无数人正在探索 VR 可以帮助患者和医疗从业者实现更好的治疗结果治疗方式&#xff0c;比如在手术、疼痛管理…

下拉选择器的树状结构图

类似&#xff1a;【Vue-Treeselect 和 vue3-treeselect】树形下拉框 一&#xff1a;图 二&#xff1a;如果有多层级的数据结构&#xff0c;可以用treeselect插件实现 1、安装&#xff1a; npm install --save riophae/vue-treeselect 2、实现&#xff1a; <el-form ref&qu…

[计算机入门] 应用软件介绍(娱乐类)

3.21 应用软件介绍(娱乐类) 3.21.1 音乐&#xff1a;酷狗 音乐软件是一类可以帮助人们播放、管理和发现音乐的应用程序。它们提供了丰富的音乐内容&#xff0c;用户可以通过搜索、分类浏览或个性化推荐等方式找到自己喜欢的歌曲、专辑或艺术家。音乐软件还通常支持创建和管理…

【学习笔记】RabbitMQ-5 消息的可靠性投递 以及示例代码

参考资料 RabbitMQ官方网站RabbitMQ官方文档噼咔噼咔-动力节点教程 文章目录 八、RabbitMQ的确认机制 -confirm8.1 Confirm 模式简介8.2 具体代码设置8.2.1 **设置思路**&#xff1a;8.2.2 **代码实现**8.2.2.1 开启生产者的确认模式.8.2.2.2 实现接口ComfirmCallback8.2.2.3 配…

Git 分布式版本控制工具

目录 1. 前言1.1 什么是Git1.2 使用Git能做什么 2. Git概述2.1 Git简介2.2 Git下载与安装 3. Git代码托管服务3.1 常用的Git代码托管服务3.2 码云代码托管服务3.2.1 注册码云账号3.2.2 登录码云3.2.3 创建远程仓库3.2.4 邀请其他用户成为仓库成员 4. Git常用命令4.1 Git全局设置…

Flume 整合 Kafka

1.背景 先说一下,为什么要使用 Flume + Kafka? 以实时流处理项目为例,由于采集的数据量可能存在峰值和峰谷,假设是一个电商项目,那么峰值通常出现在秒杀时,这时如果直接将 Flume 聚合后的数据输入到 Storm 等分布式计算框架中,可能就会超过集群的处理能力,这时采用 Kaf…

品牌创意二维码营销活动:MoneyLion 在纽约全城“撒钱”,月增百万级曝光!

在2023年4月——金融知识月&#xff0c;MoneyLion 在纽约策划了一场轰动全城的“撒钱”活动&#xff01; 在开始介绍这场极具创意的活动之前&#xff0c;我们先来了解一下MoneyLion这家公司。MoneyLion 是一家私营金融科技公司&#xff0c;为消费者提供贷款、财务咨询和投资服…

Apache Doris (四十二): RECOVER数据删除恢复

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

HTML 常用标签及练习

常用标签 <head>中的标签 概述 head中的内容不显示到页面上 标签说明<title>定义网页的标题<meta>定义网页的基本信息&#xff08;供搜索引擎&#xff09;<style>定义CSS样式<link>链接外部CSS文件或脚本文件<script>定义脚本语言<…

源码编译安装部署lnmp

源码编译安装部署lnmp 文章目录 源码编译安装部署lnmp1.简介&#xff1a;2.环境说明&#xff1a;3.部署前的准备工作4.安装nginx4.1.进入官网拉取nginx源码包4.2.通过IP地址访问nginx的web页面 5.安装mysql5.1.安装依赖包5.2.创建用户和组5.3.下载源码包并解压到/usr/local/5.4…

Helm upgrade 时 no matches for kind “xxxx“ in version “xxxx“ 问题处理

1. 问题 kubernetes 升过级&#xff0c;但是 helm release 旧版本中有新版本 api 弃用的 version。 在 helm upgrade 时就出现类似如下版本不匹配的错误&#xff0c;导致 helm upgrade 失败。 当然 helm uninstall 再重新安装可能可以跳过这个问题&#xff08;只要 charts 不再…

移动端1px-从基本原理到开源解决方案介绍

1px 不够准确&#xff0c;应该说成 1 物理像素 为什么有 1px 这个问题&#xff1f;实现 1px 有哪些方法&#xff1f;这些方法分别有哪些优缺点&#xff1f;开源项目中使用的哪些解决方案&#xff1f;如何在项目中处理 1px 的相关问题&#xff1f; 基本概念 首先&#xff0c;我们…

给cmd控制台程序 套壳 美化

给cmd控制台程序套壳美化&#xff0c;可以获取程序的标准输出和报错信息。 # _*_ coding: utf-8 _*_ """ 控制台程序启动器&#xff0c;杜绝黑窗口。 Time: 2023/10/18 15:28 Author: Jyun Version: V 0.1 File: main.py Blog: https://ctrlcv.…

Python中Numpy的应用技巧

目录 1. 什么是 NumPy?2. NumPy 中的数组2.1. 创建数组2.2. 用Numpy的数据2.2.1. OpenCV2.2.2. Pandas 3. 数学计算3.1. 四则计算3.1.1. 矩阵乘法3.1.2. 点乘 3.2. 求逆矩阵与伪逆矩阵3.3. 判断矩阵相等3.4. np.eye()函数生成对角阵 4. 统计4.1. 最大值、最小值、均值条件4.2.…

在 Python 中如何向列表或数组添加元素

在这篇文章中&#xff0c;你将了解 Python 中的 .append() 方法。你还会看到 .append() 与其他用于向列表添加元素的方法有什么不同。 让我们开始吧&#xff01; Python 中的列表是什么&#xff1f;给初学者的定义 编程中的数组是一个有序的项目集合&#xff0c;所有的项目都…