学会挖洞系列之JSON Hijacking漏洞挖掘

现在越来越多的大公司开始建立自己的安全应急响应中心,以用来发现并修复自己的漏洞,接下来我们就来说一下如何去挖这些src的漏洞。

现在越来越多的大公司开始建立自己的安全应急响应中心,以用来发现并修复自己的漏洞,接下来我们就来说一下如何去挖这些src的漏洞。

这次介绍的是一个比较简单的JSON Hijacking漏洞的挖掘,通过学习这篇文章我们可以了解到Hi jacking漏洞的原理,如何挖掘该漏洞,挖掘过程中的一些小技巧以及修复此类漏洞的一些方法。首先我们要先了解一些JSON Hijacking漏洞的相关知识点。

1、json是什么?

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

{"firstName": "Brett", "lastName": "McLaughlin"}

2、JSON 与 JS 对象的关JSON 与 JS 对象的关系系

JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串,例如:

var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的 

 var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串

3、JSON 和 JS 对象的相互转换

要实现从对象转换为 JSON 字符串,使用 JSON.stringify() 方法:

var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'

要实现从 JSON 转换为对象,使用 JSON.parse() 方法:

var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}

4、JSON Hijacking漏洞原理

JSON实际应用的时候会有两种传输数据的方式:

xmlhttp获取数据方式:

{"username":"wooyun","password":"wooyun"}

当在前端获取数据的时候,由于数据获取方和数据提供方属于同一个域下面,所以可以使用 xmlhttp的方式来获取数据,然后再用xmlhttp获取到的数据传入自己的js逻辑如eval。

script获取数据方式:

userinfo={"username":"wooyun","password":"wooyun"}

如果传输的数据在两个不同的域,由于在javascript里无法跨域获取数据,所以一般采取script标签的方式获取数据,传入一些callback来获取最终的数据,这就有可能造成敏感信息被劫持。

所以,总的来说就是网站以JSON形式输出数据,且其中包含用户敏感信息,攻击者通过第三方站点以CSRF手段使用户浏览器请求目标站点得到包含敏感信息的JSON数据,进而劫持到敏感信息。

原理就先说到这里,更多关于JSON的信息,如果感兴趣大家可以自行百度,下面就是漏洞实例讲解了。

漏洞实例

这里假设一个场景,你想要知道女神的家庭住址,那我们首先就要找到类似于购物或者外卖的网站,因为这种网站基本都有收货地址这条敏感信息(实际中不仅限于收货地址,任何敏感信息都可以,甚至用于用户认证的关键参数)。

首先,可以在网页所有可能返回收货地址的地方都操作一遍,比如这种地方。

2.png

之后呢,再通过BURP的HTTP history功能寻找以json形式返回的带有敏感数据的数据包,像这样的。

1.png

如果找到这样的地方,恭喜你已经成功了百分之50了,接下来就是进一步验证漏洞是否存在了。

将刚才找到的URL复制下来,然后直接复制到浏览器中打开,如果浏览器中也成功返回了用户的所有信息,那基本可以判定,这里可能并没有做一些类似于Referer验证的操作。

3.png

到这里,基本可以确定漏洞存在了,接下来我们就可以编写一个简单的验证代码,进一步证明漏洞存在。

<script> 
function jsonp1(json){ 
alert(JSON.stringify(json)) 
  } 
</script>  

<script src="https://***.com/pub/***/PointsMall/QueryAddress?callback=jsonp1"></script>

复现的时候很简单,直接把上面的代码copy下来,然后拿你找到的url去替换掉源代码中的src后面的链接,注意callback后面接的那个参数要和function后面的函数名保持一致,然后保存为**.html,然后把它放到你自己的服务器上,然后打开链接之后,提示如下:

4.png

到这里我们就成功挖到了src的一个简单的漏洞了,成功在我们域下劫持到了目标域下的敏感信息。

*本文作者:野火研习社·fakl,转载请注明

发表评论

已有 5 条评论

取消
Loading...
css.php