当前位置: 首页 > news >正文

JSONP漏洞详解

目录

同源策略

JSONP简介

JSONP劫持漏洞

漏洞原理

漏洞利用过程

利用工具

JSONP漏洞挖掘思路

JSONP防御


首先,要了解一下什么是同源策略?

同源策略

同源策略(SOP)是浏览器的一个安全基石,浏览器为了保证数据的完整性和机密性,必须严格隔离两个不同源的网站。举个例子:如果没有同源策略,打开一个合法网站,又打开一个恶意网站,没有同源策略的情况下恶意网站的脚本能够随意的操作合法网站的任何可操作的资源,没有任何限制。

同源策略规定:

  • 非同源,不能共享Cookie等
  • 非同源,DOM和JS对象无法获得
  • 非同源,Ajax请求被禁止

那什么又是同源呢?

同源大概要满足三个条件,即同协议、同域名、同端口

但为了保证加载一些跨域资源,以下标签是不受同源策略限制的:

<script src="url">   //加载本地js执行
<img src="url>     //图片
<link href="url">    //css
<iframe src="url">  //任意资源

JSONP简介

JSONP是基于JSON格式的为解决跨域请求资源而产生的解决方案。实现的基本原理就是动态创建<script>标签,然后利用<script>标签的src不受同源策略约束来跨域获取数据。

JSONP有两部分组成:回调函数和数据。回调函数就是当响应到来时应该在页面中调用的函数。数据就是传入回调函数中的JSON数据。

JSONP劫持漏洞

漏洞原理

如果服务端对JSONP的请求来源校验不严格,那么攻击者可以构造恶意的JSONP调用页面,诱导被攻击者访问来达到截取用户敏感信息的目的。

JSONP与CSRF类似,都是需要用户登录账号,身份认证还没有被消除的情况下访问攻击者精心设计好的页面。而且同样的是需要用户去访问有恶意的页面。只不过JSONP需要攻击者寻找敏感JSON数据API接口,构造恶意的代码。

漏洞利用过程

1、比如,用户在网站B注册并登录,网站B包含了用户的id、name等信息;

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>

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

5、网站B接收到请求,解析请求URL,以JSON格式生成数据,封装好用户的信息的JSON数据作为回调函数的参数返回浏览器:

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

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

利用工具

可以使用一个工具pocbox: pocbox

将url和jsonp类型放入pocbox,就可以生成js。然后用Tomcat或者其他拉一个html就好。

JSONP漏洞挖掘思路

常用关键词:

callback
jsoncallback
jsonpcallback
jsoncall
jsonpcall
cb
jsoncb
jsonpcb
=json
=jsonp
=jQuery 

可以在Google等有高级语法使用高级语法搜索:

inurl:json
inurl:callback=
site:a.com inurl:json

可以使用手工测试:

f12 , network , 勾选Preserve log , 防止页面刷新跳转的时候访问记录被重置
然后 F5 刷新,进入 NetWork 标签 ,CTRL+F 查找一些关键词 如 callback json jsonp jsonpcallback
然后找响应中存在敏感信息的 , 然后构建 poc测试

JSONP防御

  • 尽量避免跨域的数据传输,如果要进行跨域的数据传输,必须要对敏感的数据获取做权限认证;
  • 严格过滤calback函数名及JSON里数据的输出,限制函数名的长度;
  • ...

参考资料:

生命在于学习——Jsonp漏洞-CSDN博客

jsonp劫持-CSDN博客

相关文章:

  • 算法——贪心算法
  • Qt文件以及文件夹相关类(QDir、QFile、QFileInfo)的使用
  • 第七节:Vben Admin权限-后端获取路由和菜单
  • 使用Docker在windows上安装IBM MQ
  • Android 辅助功能 -抢红包
  • VUE3生命周期钩子
  • HCIA_IP路由基础问题?
  • SOPHON算能服务器SDK环境配置和相关库安装
  • 【代码】YOLOv8标注信息验证
  • Element UI +Vue页面生成二维码的方法
  • C++_day6:2024/3/18
  • AWS监控,AWS 性能监控工具
  • Apache Doris 2.1 核心特性 Variant 数据类型技术深度解析
  • Linux权限维持后门及应急响应
  • 我的自建博客之旅03之vuepress和Vitepress
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 345-反转字符串中的元音字母
  • Centos6.8 使用rpm安装mysql5.7
  • JavaScript中的对象个人分享
  • Joomla 2.x, 3.x useful code cheatsheet
  • nginx 配置多 域名 + 多 https
  • ubuntu 下nginx安装 并支持https协议
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 看域名解析域名安全对SEO的影响
  • 面试遇到的一些题
  • 前言-如何学习区块链
  • 入门级的git使用指北
  • 数据仓库的几种建模方法
  • 通信类
  • 微服务核心架构梳理
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 回归生活:清理微信公众号
  • 通过调用文摘列表API获取文摘
  • ​io --- 处理流的核心工具​
  • #include<初见C语言之指针(5)>
  • $ git push -u origin master 推送到远程库出错
  • $.ajax()
  • (06)金属布线——为半导体注入生命的连接
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (C)一些题4
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (办公)springboot配置aop处理请求.
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (四)图像的%2线性拉伸
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)关于pipe()的详细解析