专栏首页卓文见识JSON相关漏洞(Hijacking+Injection)挖掘技巧及实战案例全汇总

JSON相关漏洞(Hijacking+Injection)挖掘技巧及实战案例全汇总

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

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 里 <script></script> 元素标签,远程调用 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漏洞,防范办法和绕过技巧也类似。

本文分享自微信公众号 - 卓文见识(zhuowenjianshi),作者:Jayway

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 浏览器解析与编码顺序及xss挖掘绕过全汇总

    在以往的培训和渗透过程中,发现很多渗透人员尤其是初学者在挖掘xss漏洞时,很容易混淆浏览器解析顺序和解码顺序,对于html和js编码、解码和浏览器解析顺序、哪些...

    Jayway
  • Python安全之反序列化——pickle/cPickle

    Python中有两个模块可以实现对象的序列化,pickle和cPickle,区别在于cPickle是用C语言实现的,pickle是用纯python语言实现的,用...

    Jayway
  • CRLF注入(响应截断)挖掘技巧及实战案例全汇总

    CRLF是CR和LF两个字符的拼接,它们分别代表”回车+换行”(\r\n)“,全称为Carriage Return/Line Feed”,十六进制编码分别为0...

    Jayway
  • 国内电子签名如火如荼,为何DocuSign 在美遇到IPO危机?

    T客汇官网:tikehui.com 撰文 | 杨丽 电子签名,就是通过密码技术对电子档案实施电子形式的签名,能帮助企业大大提升文档签名授权的效率,这项服务在企...

    人称T客
  • PHP安装CURL扩展

    ./configure --prefix=/usr/local/bin/curl/

    王亚昌
  • Java 错别字检查接口 API

    为了方便广大程序员朋友快速把错别字检查功能集成到自己的系统中,我们开发了一个支持HTTP协议的 Java 错别字检查接口 API,代码放在了 github 上...

    田春峰-JCJC错别字检测
  • 写在 Python 3.9 即将出世的前夕

    今天读 PyCoder's Weekly( PyCoder's Weekly 会收集和整理一周内关于 Python 的最新文章和讨论,并发送给订阅者的邮箱)时候...

    哒呵呵
  • Spark DataFrame

    DataFrame是一种不可变的分布式数据集,这种数据集被组织成指定的列,类似于关系数据库中的表。SchemaRDD作为Apache Spark 1.0版本中的...

    week
  • 最深的云网融合:多接入边缘计算(MEC)

    作者简介:张云锋,十年网络相关行业从业经验,网络云化/云网融合相关行业从业人员,微信号:leoricmaster

    SDNLAB
  • 物联网关键技术之射频识别技术

    在现在这个科技快速发展的时代,无人驾驶汽车、无人机等等高科技产品应运而生,这些高科技的产品在改变着我们的传统的生活方式。

    物流IT圈

扫码关注云+社区

领取腾讯云代金券