本文一是在为测试过程中遇到json返回格式时提供测试思路,二是几乎所有国内的资料都混淆了json和jsonp的区别——这是两种技术;以及json和jsonphijacking的区别——这是两个漏洞,这里做个解释。

1、概念

1)什么是json

json(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。JSON最常用的格式是对象的键值对,例如下面这样:

{"firstName": "Jayway","lastName": "0Day"}

2)json hijacking漏洞

json劫持(jsonhijacking)漏洞其实是一个跨域数据窃取漏洞,它通过诱导用户点击恶意文件,重写Array()的构造函数的方法,将敏感的json数据发送攻击者,从而造成敏感信息泄露,所以可以理解为“通过CSRF方式导致的敏感信息泄露”。

举例说明:用户Jayway访问网站https://haacked.com/发出请求:

GET:/demos/secret-info.json返回敏感信息:{"firstName":"Jayway", "lastName": "0Day"}此时,攻击者在他的服务器上放置这样一个html文件:

攻击者诱导用户Jayway点击这个文件,页面会弹框。若将alert改为其他操作函数,攻击者可以对用户的json数据作任意处理:

攻击的成功关键在于JavaScript允许重新定义Array构造函数:如果在JS中定义了两个相同名称的函数/方法,那么前一个函数等于定义无效,后一个函数才是有效的定义。

上面的HTML文件构造,关键是三步:

1)重新定义数组构造函数Array = function() 并将数组赋值给我们定义的全局变量;

2)向目标网站发送一条请求,借用被攻击者的session权限;

3)将获得的数据赋给yourData,从而进行任意处理。

其中第一步的函数覆盖是关键,可以JS中的方法覆盖的特性或者使用JS的特殊方法Object.prototype.__defineSetter__等。

3)什么是jsonp

jsonp(jsonp withPadding)是带有Padding的JSON,它的产生就是为了解决跨域访问问题,基本原理是利用了HTML 里 元素标签,远程调用 JSON 文件来实现数据传递。它最大的特征就是回传,也就是常见的callback函数。

比如,在一个端点处有下列json数据:

若传输到reports域内会因同源策略而无法进行xhr传输:

所以我们先通过 JSONP 的”Padding “输出为:

而后定义myCallback函数,在脚本标记中引用API调用来调用,callback参数在这里是可以自定义的:

4)jsonp injection漏洞

了解了jsonp的用法,由于callback参数可以自定义,所以就有了所有注入漏洞都有的通病:“输入在输出中回显”,其中导致的一个问题就是XSS,前提是返回包Content-Type:text/html而不是Content-Type: application/json。

此外jsonp也有hijacking漏洞,但稍有不同,json是重写函数,而jsonp是通过重写参数callback的函数值,payload更简单,自定义一个函数名然后通过callback调用:

达到的攻击效果主要是盗取用户敏感数据:

2、漏洞对比

现在我们知道jsonhijacking和jsonp injection是两个完全不同的漏洞,两种漏洞的共性是:

1)挖掘方法:在渗透过程中关注或通过burp的HTTP history功能寻找以json形式返回的带有敏感数据的数据包;

2)都可以实现hijacking攻击,达到盗取用户敏感信息,劫持钓鱼、挂马等。

不同点是:

1)返回格式不同:jsonp请求包里有callback参数,返回包里也多一个

parseResponse({"xx":"yy"});

2)攻击效果不同: jsonpinjection除了hijacking还可能造成注入漏洞xss。

3、实战案例

1)Twitter json hijacking

比较老的一个漏洞,原理和上面类似,攻击payload如下,重写的函数__defineSetter__也是很多浏览器使用的js扩展。

2)  新浪jsonphijacking盗取csrf_token

经典的jsonp hijacking,callback参数回显:

构造HTML文件获取csrf token:

进一步使用token构造发帖的post包,造成蠕虫攻击:

点击触发,发帖成功:

3)  Liberapay jsonp hijacking

/username/charts.json端点可以返回一个JSONP回调,构造payload造成信息泄露:

4)  Quora jsonp xss

本质上不是json的漏洞,返回值格式为jsonp,由于post请求参数__e2e_action_id未经过滤,输入回显到返回包,导致xss,返回包简化为:

"js":"require('actions').finishAction('',alert(),'', {\"cont... "},

4、漏洞修复

Hijacking漏洞本质上是CSRF漏洞,防范办法和绕过技巧也类似。

java json injection_JSON相关漏洞(Hijacking+Injection)挖掘技巧及实战案例全汇总相关推荐

  1. java json injection_JSON Injection解决方法

    JSON Injection 解决: 加 JsonSanitizer.sanitize() 进行校验(这个校验貌似可以解决很多Json相关的Fortify Issue): com.mikesamuel ...

  2. .hpp文件_文件上传漏洞另类绕过技巧及挖掘案例全汇总

    文件上传漏洞作为获取服务器权限最快的方式,虽然相关资料很多,但很多人对上传校验方式.如何针对性绕过检测.哪种上传和解析的场景会产生危害等还是比较模糊.本文作一些阐述,然后补充一些除了上传webshel ...

  3. 上传绕过php文件改为图片,文件上传漏洞另类绕过技巧及挖掘案例全汇总

    文件上传漏洞作为获取服务器权限最快的方式,虽然相关资料很多,但很多人对上传校验方式.如何针对性绕过检测.哪种上传和解析的场景会产生危害等还是比较模糊.本文作一些阐述,然后补充一些除了上传webshel ...

  4. Java程序员校招蚂蚁金服,微信抢红包实战案例,纯干货

    开头 对于一个Java程序员而言,能否熟练掌握并发编程是判断他优秀与否的重要标准之一.因为并发编程是Java语言中最为晦涩的知识点,它涉及操作系统.内存.CPU.编程语言等多方面的基础能力,更为考验一 ...

  5. python json和java json的使用

    python json和java json的使用 1.python json import json data={ "id" : 123, "name" : & ...

  6. ref:PHP反序列化漏洞成因及漏洞挖掘技巧与案例

    ref:https://www.anquanke.com/post/id/84922 PHP反序列化漏洞成因及漏洞挖掘技巧与案例 一.序列化和反序列化 序列化和反序列化的目的是使得程序间传输对象会更加 ...

  7. SpringBoot相关漏洞

    以下文章来源方志朋的博客,回复"666"获面试宝典 本文是 Spring Boot 相关漏洞的学习资源,仅作为安全研究和授权测试使用,不要用于非法活动. 这个GitHub项目从信息 ...

  8. 用Jackson进行Java JSON处理

    JSON (Javascript对象符号)正成为一种非常流行的数据交换格式. 在使用诸如YUI,ExtJS,DOJO等Javascript框架开发Web应用程序时,我们可以使用XML或JSON在客户端 ...

  9. pythonjson实例_python对json的相关操作实例详解

    本文实例分析了python对json的相关操作.分享给大家供大家参考,具体如下: 什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人 ...

最新文章

  1. 关于R语言plyr包的安装问题
  2. css笔记 - transition学习笔记(二)
  3. 实例讲解UML建模分析与设计
  4. 《理解 ES6》阅读整理:块绑定(Block Binding)
  5. goaccess-nginx日志分析工具简介
  6. spring什么版本支持java8,与Java 11兼容的最低Spring版本
  7. JavaScript函数调用规则
  8. Vue结合Echarts
  9. 玩奇迹私服老是服务器维护,为什么奇迹私服进不去啊
  10. tpcc-mysql安装测试与使用生成对比图
  11. JavaScript设计一个框架
  12. 深度学习TF—2.TensorFlow2高阶操作
  13. PROE_CONFIG
  14. Linux C++后端开发学习路线参考汇总
  15. 华北黄淮江淮等地有大雾 江南华南等地有小到中雨
  16. Photoshop 快速选择工具抠图
  17. OSPF P2MP 扩展知识
  18. java 判断正态分布_如何判断一个样本是否来自正态分布的总体?
  19. 如何搭建个人网站(内容详细,适合新手)
  20. 过渡属性transition详解

热门文章

  1. 恶意代码分析实战Lab01-03,lab01-04
  2. 解决 RIDE 执行输出日志中文乱码(RIDE 1.7.4.2)
  3. 500g硬盘装linux怎样分,500G的硬盘,怎么分区比较合理?
  4. 美食主题网页设计 学生HTML个人网页作业作品下载 个人主页博客网页设计制作 大学生个人网站作业模板 dreamweaver简单个人网页制作
  5. Windows下Qt拔插U盘的检测方法
  6. css 修改浏览器滚动条样式(火狐Firefox,谷歌google)
  7. Windows编程 内存中加载图片并显示 Direct离屏表面的实现
  8. 怎么搭建python开发环境?
  9. 一文详解VarScan肿瘤体细胞突变检测的的安装和实践
  10. 二进制十进制转换史上最牛逼算法!!