jsonp劫持

news/2024/5/16 15:40:03

jsonp劫持

  • 什么是json
  • json语法规则
  • 浏览器的同源策略
  • JSONP
    • JSONP跨域请求的原理
    • JSONP 的组成
      • 深入研究
  • JSONP劫持漏洞的学习
    • JSONP劫持的原理
    • 漏洞利用过程
  • jsonp劫持举例

什么是json

JSON指的是JavaScript对象表示法( JavaScript Object Notation)
JSON是轻量级的文本数据交换格式
JSON是存储和交换文本信息的语法,类似XML
但JSON比XML更小、更快、更易解析
C、Python、C++、Java、PHP、Go等编程语言都支持JSON
几乎所有编程语言都有解析JSON的库,而在JavaScript中,我们可以直接使用JSON,因为JavaScript内置了JSON的解析。

把任何JavaScript对象变成JSON,就是把这个对象序列化成一个JSON格式的字符串,这样才能够通过网络传递给其他计算机。

json语法规则

数据为 键/值 对(key:value)
数据由逗号分隔
方括号保存数组
大括号保存对象

var Deutsh = {name: 'De4tsh',age: 66,height: 2.01,grade: null,skills: ['JavaScript', 'C', 'C++', 'Python'], // 数组like: {"sports":"football","eat":"pizza"}     // 对象
};// 将 Deutsh 对象序列化为 JSON 格式字符串
var deu = JSON.stringify(Deutsh); 
console.log(deu);

转换得到的 JSON 格式的数据为:

{"name":"De4tsh","age":66,"height":2.01,"grade":null,"skills":["JavaScript","C","C++","Python"],"like":{"sports":"football","eat":"pizza"}}

浏览器的同源策略

SOP,全称为同源策略 (Same Origin Policy),该策略是浏览器的一个安全基石,如果没有同源策略,那么,你打开了一个合法网站,又打开了一个恶意网站。恶意网站的脚本能够随意的操作合法网站的任何可操作资源,没有任何限制。浏览器要严格隔离两个不同源的网站,目的是保证数据的完整性和机密性。
浏览器的同源策略规定:不同域的客户端脚本在没有明确授权的情况下,不能读写对方的资源。那么何为同源呢,即两个站点需要满足同协议,同域名,同端口这三个条件。
“同源”的定义:
域名
协议
tcp端口号
只要以上三个值是相同的,我们就认为这两个资源是同源的。

JSONP

CORS是推荐的方法,而不是JSONRequest。JSONP对于较旧的浏览器支持仍然有用,但考虑到安全隐患,除非您别无选择,否则CORS是更好的选择

JSONP是JSON with padding(填充式JSON或参数式JSON)

简单来说,JSON的一种”使用模式”,可以让当前网页从别的域名(网站)那获取资料,即跨域读取数据,而且JSONP算是一种非官方的技术手段 ( 官方的有CORS(之前在 SSTI 注入时提到过) 和postMessage)

至于为什么跨域访问别的域名的资源还要借助这种方式,原因在于有着:同源策略的限制:在Web浏览器中,允许某个网页脚本访问另一个网页的数据,但前提是这两个网页必须有相同的URI、主机名和端口号,一旦两个网站满足上述条件,这两个网站就被认定为具有相同来源。此策略可防止某个网页上的恶意脚本通过该页面的文档对象模型访问另一网页上的敏感数据(比如说 cookie )值得注意的是同源策略仅适用于脚本,这意味着某网站可以通过相应的HTML标签访问不同来源网站上的图像、CSS和动态加载脚本等资源。而跨站请求伪造就是利用同源策略不适用于HTML标签的缺陷。

JSONP跨域请求的原理

如上所述,JSONP正是利用了HTML中的

JSONP会动态的创建

JSONP 的组成

JSONP由两部分组成

回调函数—callback
数据——data
简单来说整体流程为:

当我们访问一个网站时,若该网站需要请求外部的资源,会通过动态建立一个带有src属性的

深入研究

首先来看看同源策略到底有什么作用:当浏览器发现有一个跨域的请求,但是它在服务器的返回头中如果没有发现
Access-Control-Allow-Origin 值允许 http://x.x.x.x 的访问,那么便会将其给拦截。
那么虽然浏览器受到了同源策略的限制,不允许实现跨域访问,但是由于在开发过程中,其中的前后端的交互过程中不可避免会涉及到跨域的请求(设计同源策略的人想必也发现了这个问题),于是设计者给我们留了一个后门,就是只要服务器响应头中返回允许这个源的选项,那么跨域请求就会成功。(这里纠正一个误区,不要认为浏览器默认支持同源策略就意味着不同源的请求就不能发出去,其实还是能发出去的,只是要看响应头)

我们都知道在页面中有几个东西是对同源策略免疫的,有 < img >的src 、< link > 的 href 还有就是< script >的 src , 那么JSONP 就是利用其中的 < script > 标签的sec 属性实现跨区域请求的。
< script >标签的请求不论是不是同源一律不受同源策略的限制,那我们就找到了解决跨域访问的方法。
这里我们用一个例子来更加直观的展示:
getUser.php代码如下:

<?php
header('Content-type: application/json');
$jsoncallback = htmlspecialchars($_REQUEST ['jsoncallback']);//获取回调函数名
//json数据
//$json_data = '["id","user"]';
$json_data='({"id":"1","name":"Aaron"})';
echo $jsoncallback . "(" . $json_data . ")";//输出jsonp格式的数据
?>

请求该接口并加上jsoncallback=1,即访问http://127.0.0.1/jsonp%20poc/getuser.php?jsoncallback=1,返回值如下
在这里插入图片描述

在返回值开头中可见1,如果我们修改callback的值为其他值,此处的返回值也会相应改变。

1.html代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSONP劫持测试</title>
</head>
<body>
<script type="text/javascript">
function callbackFunction(result){alert(result.name);}
</script>
<script type="text/javascript" src="http://127.0.0.1/JSONP PoC/getUser.php?jsoncallback=callbackFunction"></script>
</body>
</html>

我们在

下面是调用成功的截图
在这里插入图片描述
实际上,jquery 给我们提供了现成的接口,我们可以不用这么麻烦。
2.html代码如下:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>JSONP劫持测试</title><script src="http://cdn.static.runoob.com/libs/jquery/1.8.3/jquery.js"></script>    
</head>
<body>
<div id="divCustomers"></div><script type="text/javascript">    $.getJSON("http://127.0.0.1/JSONP PoC/getUser.php?jsoncallback=?", function(getUsers){alert(getUsers.name);});
</script>
</body>
</html>

在这里插入图片描述
所以整个的具体过程其实就是:
我们把回调函数给了服务器,服务器把json参数给了回来。

JSONP劫持漏洞的学习

JSONP劫持的原理

这里就简单的说一下:

JSONP就是为了跨域获取资源而产生的一种非官方的技术手段(官方的有 CORS 和 postMessage),它利用的是

那么劫持又是怎么回事呢?其实我们在学安全的过程中对劫持这个词可以说是一点也不陌生,我们遇到过很多的劫持的攻击方法,比如:dns 劫持、点击劫持、cookie劫持等等,也正如劫持这个词的含义:“拦截挟持”,dns 劫持就是把 dns 的解析截获然后篡改,点击劫持就是截获你的鼠标的点击动作,在用户不知情的情况下点击攻击者指定的东西;cookie 劫持就是获取用户的 cookie,然后可以进一步伪造身份;那么同样, jsonp劫持就是攻击者获取了本应该传给网站其他接口的数据。

漏洞利用过程

在这里插入图片描述

  1. 用户在网站B 注册并登录,网站B 包含了用户的id,name,email等信息;
  2. 用户通过浏览器向网站A发出URL请求;
  3. 网站A向用户返回响应页面,响应页面中注册了JavaScript的回调函数和向网站B请求的
<script type="text/javascript">
function Callback(result)
{alert(result.name);
}
</script>
<script type="text/javascript" src="http://B.com/user?jsonp=Callback"></script>
  1. 用户收到响应,解析JS代码,将回调函数作为参数向网站B发出请求;
  2. 网站B接收到请求后,解析请求的URL,以JSON格式生成请求需要的数据,将封装的包含用户信息的JSON数据作为回调函数的参数返回给浏览器,网站B返回的数据实例如下:
Callback({"id":1,"name":"test","email":"test@test.com"})
  1. 网站B数据返回后,浏览器则自动执行Callback函数对步骤4返回的JSON格式数据进行处理,通过alert弹窗展示了用户在网站B的注册信息。另外也可将JSON数据回传到网站A的服务器,这样网站A利用网站B的JSONP漏洞便获取到了用户在网站B注册的信息。

jsonp劫持举例

首先我们需要一个工具pocbox,我们可以去github上下载
github上pocbox
准备好后
我随便抓了一个国美网站有callback的包
请添加图片描述

然后把url和jsonp类型放入pocbox
请添加图片描述
生成js
然后我们拉一个网站,这里我用tomcat拉起来一个html
请添加图片描述
之后我们访问这个网站,进行跨域jsonp劫持获取到其中一些信息
请添加图片描述

借鉴原文
https://zhuanlan.zhihu.com/p/585916963
https://xz.aliyun.com/t/10051


http://www.mrgr.cn/p/47301523

相关文章

Spring,SpringBoot,Spring MVC的区别是什么

1.Spring是什么 我们通常所说的 Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是⼀个开源框架&#xff0c;有着活跃⽽庞⼤的社区&#xff0c;这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景&#xff0c;它可以让 Java 企业级…

【Android常见问题(五)】- Flutter项目性能优化

文章目录 知识回顾前言源码分析1. 渲染过程2. 分析工具3. 优化方法合理使用const关键词合理使用组件管理着色器编译垃圾 知识回顾 前言 项目迭代开发一定程度后&#xff0c;性能优化是重中之重&#xff0c;其中包括了包体积&#xff0c;UI 渲染、交互等多个方面。 通过 Flutt…

火山引擎AB测试:广告实验深度打通巨量引擎,高效测试广告素材

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近期&#xff0c;火山引擎AB测试DataTester上线了新版的广告AB实验&#xff0c;还推出了与巨量引擎深度打通的能力。用户可以在DataTester中直接进行广告落地页的创…

csdn新星计划vue3+ts+antd赛道——利用inscode搭建vue3(ts)+antd前端模板

文章目录 ⭐前言⭐利用inscode免费开放资源&#x1f496; 在inscode搭建vue3tsant项目&#x1f496; 调整配置&#x1f496; antd 国际化配置&#x1f496; 用户store&#x1f496; 路由权限&#x1f496; 预览 ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享…

layui框架学习(35:数据表格_列参数设置)

Layui中的table数据表格模块支持对表格及列进行基础参数设置以提高数据的可视化及可操作性&#xff0c;本文学习并记录与列相关的主要基础参数的用法及效果。   基础参数field设置待显示到列中的数据的字段名&#xff0c;主要针对数据表格url属性中返回的数据集合或data属性设…

数据预处理matlab

matlab数据的获取、预处理、统计、可视化、降维 数据的预处理 - MATLAB & Simulink - MathWorks 中国https://ww2.mathworks.cn/help/matlab/preprocessing-data.html 一、数据的获取 1.1 从Excel中获取 使用readtable() 例1&#xff1a; 使用spreadsheetImportOption…

AttributeError: ‘DataFrame‘ object has no attribute ‘iteritems‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Linux内核中的链表、红黑树和KFIFO

lLinux内核代码中广泛使用了链表、红黑树和KFIFO。 一、 链表 linux内核代码大量使用了链表这种数据结构。链表是在解决数组不能动态扩展这个缺陷而产生的一种数据结构。链表所包含的元素可以动态创建并插入和删除。链表的每个元素都是离散存放的&#xff0c;因此不需要占用连…

华为eNSP:isis配置跨区域路由

一、拓扑图 二、路由器的配置 1、配置接口IP AR1: <Huawei>system-view [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [Huawei-GigabitEthernet0/0/0]q AR2: [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.2 24 [Huawe…

Redis系列一:介绍

介绍 The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker. 相关资源 Redis 官网&#xff1a;https://redis.io/ 源码地址&#xff1a;https://github.com/redis/redis Redis 在线测试&#…

kafka第三课-可视化工具、生产环境问题总结以及性能优化

一、可视化工具 https://pan.baidu.com/s/1qYifoa4 密码&#xff1a;el4o 下载解压之后&#xff0c;编辑该文件&#xff0c;修改zookeeper地址&#xff0c;也就是kafka注册的zookeeper的地址&#xff0c;如果是zookeeper集群&#xff0c;以逗号分开 vi conf/application.conf 启…

服务器被爬虫恶意攻击怎么办?

在有预算的情况可以采购第三方服务防火墙&#xff0c;没钱就使用开源的WAF进行防护。 # WAF防火墙的基本防护原理 WAF&#xff08;Web 应用防火墙&#xff09;可以使用多种技术来防止恶意爬虫攻击&#xff0c;例如&#xff1a; 1. 黑名单&#xff1a;WAF 可以使用黑名单技术来…

微信小程序数字键盘(仿微信转账键盘)

微信小程序input自带数字输入键盘&#xff0c;不过是直接调用的系统键盘&#xff0c;无法个性化。 代码中使用使用了Vant WeappVant UI小程序版&#xff0c;这里就不介绍相关安装说明了&#xff0c;大家自行安装Vant Weapp。 json 用到的组件 {"usingComponents": …

用Rust生成Ant-Design Table Columns | 京东云技术团队

经常开发表格&#xff0c;是不是已经被手写Ant-Design Table的Columns整烦了&#xff1f; 尤其是ToB项目&#xff0c;表格经常动不动就几十列。每次照着后端给的接口文档一个个配置&#xff0c;太头疼了&#xff0c;主要是有时还会粘错就尴尬了。 那有没有办法能自动生成colu…

产品经理:如何做好项目需求管理

产品经理每天都要接触各种不同的需求&#xff0c;只有对这些需求进行分析&#xff0c;才能更好地了解问题&#xff0c;从而制定相应的解决方案。那么&#xff0c;怎么做需求分析呢&#xff1f; 一、需求确定 选择需求是很重要的&#xff0c;先做出选择&#xff0c;才会有对应的…

解决eclipse 打开报错 An error has occurred. See the log file null.

解决eclipse 打开报错an error has ocurred. See the log file null 出现原因&#xff1a;安装了高版本的jdk,更换 jdk 版本&#xff0c;版本太高了。 解决方案&#xff1a;更改环境变量 改成 jkd 1.8

OpenCloudOS 与PolarDB全面适配

近日&#xff0c;OpenCloudOS 开源社区签署阿里巴巴开源 CLA (Contribution License Agreement, 贡献许可协议), 正式与阿里云 PolarDB 开源数据库社区牵手&#xff0c;并展开 OpenCloudOS &#xff08;V8&#xff09;与阿里云开源云原生数据库 PolarDB 分布式版、开源云原生数…

NAT详解(网络地址转换)

一句话说清楚它是干什么的&#xff1a; 网络地址转换&#xff1a;是指通过专用网络地址转换为公用地址&#xff0c;从而对外隐藏内部管理的IP地址&#xff0c;它使得整个专用网只需要一个全球IP就可以访问互联网&#xff0c;由于专用网IP地址是可以重用的&#xff0c;所以NAT大…

【C++】AVL树

文章目录 AVL树的概念AVL树的节点定义AVL树的插入AVL树的旋转新节点插入较高右子树的右侧---右右&#xff1a;左单旋新节点插入较高左子树的左侧---左左&#xff1a;右单旋新节点插入较高左子树的右侧---左右&#xff1a;先左单旋再右单旋新节点插入较高右子树的左侧---右左&am…

simulink与遗传算法结合求解TSP问题

前言&#xff1a;刚开始入门学习simulink&#xff0c;了解了基本的模块功能后想尝试从自己熟悉的领域入手&#xff0c;自己出题使用simulink搭建模型。选择的是TSP问题的遗传算法&#xff0c;考虑如何用simulink建模思想来实现一个简单TSP问题的遗传算法。 TSP问题描述 一个配…