JSON与JSONP劫持原理

目录

JSON劫持

JSONP劫持

JSONP劫持漏洞实例

JSONP接口漏洞挖掘

漏洞危害

漏洞防御


JSON劫持

json劫持攻击又为”JSON Hijacking”,攻击过程有点类似于csrf,只不过csrf只管发送http请求,但是json-hijack的目的是获取敏感数据。

一些web应用会把一些敏感数据以json的形式返回到前端,如果仅仅通过cookie来判断请求是否合法,那么就可以利用类似csrf的手段,向目标服务器发送请求,以获得敏感数据。

比如下面的链接在已登录的情况下会返回json格式的用户信息:

http://www.test.com/userinfo

攻击者可以在自己的虚假页面中,加入如下标签:

<script src="http://www.test.com/userinfo"></script>

如果当前浏览器已经登录了www.test.com,并且cookie未过期,然后访问了攻击者的虚假页面,那么该页面就可以拿到json形式的用户敏感信息,因为script标签会自动解析json数据,生成对应的js对象。然后再通过

Object.prototype.__defineSetter__

这个函数来触发自己的恶意代码。

但是这个函数在当前的新版本chrome和firefox中都已经失效了。

JSONP劫持

jsonp是跨域问题的解决方案之一,传送门 ——> CORS跨域资源共享 

jsonp是一个非官方的协议,利用script元素的开放策略,网页可以得到从其他来源动态产生的json数据,因此可以用来实现跨域。更过关于JSONP参考 ——> https://www.jb51.net/article/31167.htm

web程序如果通过这种方式跨域之后,攻击者完全可以在自己的虚假页面中发起恶意的jsonp请求,这就引来了安全问题。比如:

<script>
function useUserInfo(v){
  alert(v.username);
}
</script>
<script src="http://www.test.com/userinfo?callback=useUserInfo"></script>

如果服务器端的userinfo接口支持jsonp,那就会使虚假页面成功执行useUserInfo函数,从而导致安全问题。

JSONP劫持漏洞实例

在某次渗透测试中我发现了web服务器存在一个jsonp接口

如在用户登录后,发现如 http://xxxxx/xx/?callback=jsonpcallback 这样的链接,访问后就会返回个人信息。攻击者可以伪造JSONP调用页面,诱导被攻击者访问来达到窃取用户信息的目的。通俗点说,就是A网站有一些接口使用了JSONP技术(简称jsonp apis),你登录A网站后,我再诱导你访问我构造的B网站,我就可以获取你登录状态下访问A网站的jsonp apis的返回结果。

即再比如用户登录了QQ空间或者QQ邮箱,然后诱导访问精心构造的B网站,因为这个接口是JSONP的,允许跨域,所以在B网站隐藏调用这个接口,就可以获取到访问者的QQ号,也就是JSONP利用。

时间有限,具体案例代码以后再添加~~

JSONP接口漏洞挖掘

我们已经知道了原理也就是JSONP实际上是使用script方式获取Javascript代码,进而执行,因此可以在我们自己的页面中,使用JSONP获取数据,并使用Javascript Hook的方式,让其执行我们自定义的回调函数,获取敏感信息。

需要满足的条件:

  1. 使用JSONP获取数据;
  2. 未检测 referer或者验证了 referer,但是验证方式不严谨,如需要验证的 referer 为 http://www.xxx.com 域,但是 http://www.xxx.com.mydomain.com 同样能够绕过;剔除referer字段,再次发出请求,测试返回结果中,是否仍包敏感信息,如果有敏感信息,说明这个接口就是我们要找的
  3. GET请求中不包含token相关的参

漏洞危害

JSON劫持主要能够造成的危害大概有这么几类:

  1. 可能导致用户权限被盗用;

  攻击者通过JSON劫持构造盗取管理员或高权限用户的脚本,一旦被访问,权限立即被盗用。

  2. 可以通过劫持对网页进行挂马;

  在JSON劫持点构造引向漏洞后门木马,但访问直接利用漏洞批量挂马。

  3. 可对劫持页进行网站钓鱼;

  利用JSON劫持直接导向伪装网站地址。

  4. 可做提权攻击;

  5. 变种拒绝服务攻击;

  劫持后将流量导向受害网站,直接发动DDOS攻击。

漏洞防御

其实json劫持和jsonp劫持属于CSRF( Cross-site request forgery 跨站请求伪造)的攻击范畴,所以解决的方法和解决csrf的方法一样。

  • 接受请求时检查referer来源。
  • 在请求中添加 Token并在后端进行验证。
  • 严格过滤callback函数名及JSON里数据的输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ly4j

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值