继续我们jsonp 安全使用分享吧!上一篇文章我们提到jsonp使用,常见2种类型漏洞出现!详细可以看看:Jsonp常见安全漏洞分析 ,今天我们来结合实例分析下该漏洞的测试、及利用过程吧!
题外话
为什么我选择是京东商城来分析它的jsonp 漏洞呢,其实主要原因最近6.18一直在做活动,我也买了不少便宜东西。现在该商城越做越好了。它系统也非常庞大,速度性能也很好。当时在购物时候,只是想看看,它的系统分离设计方面。通过分析页面http请求,发现有很多jsonp调用(也许跟换域名有关系,2种域名都可以访问,中间用jsonp交换数据),于是就看看,jsonp常见2种安全方面,有没有做处理。结果一测试。发现完全没有做任何处理,几乎是完完全全暴露出来。个人认为,对于这么大站点,这一点还是头一次遇到!居然,没有任何参数处理、以及资源授权!
京东商城Jsonp xss漏洞分析
我们看到,该请求就是一个jsonp,
默认返回:jsonp13**********({“Identity”:{“Name”:”",”IsAuthenticated”:false}}),我们知道callback传入参数,会在response中 作为函数调用名称返回!
分析callback 字符范围
1、测试下有没有屏蔽常见特殊字符” <> ()’”;. {}“,以下这些字符,经常会用到xss里面的。
到这里,分析说明这里存在着xss注入漏洞的。而且,可以选择很多种方法注入! 本编文章,旨在说明jsonp xss漏洞成因!不会具体去扩大漏洞拿到其它什么权限。以下还有个很有意思事情,callback其实,jd对一些特殊字符串做了处理的。我们看看:
从上图中,我们可以看到,京东商城,对输入callback对一些特定的字符串进行了屏蔽处理!这也是,我们做xss漏洞检查时候,经常出现问题。屏蔽字符串能够屏蔽完吗?常见26字符,长度不一任意组合。该有多少字符串呢? 很多朋友,在做安全检测时候,就是屏蔽某些觉得很不安全的标签就认为安全了。 其实,我们发现这样做法只能是一时安全,过不了多久,你会发现又有新的字符串出现。你会为此花费大量的人力物力!好了,做类似事情,我们最好方法是,认证那些觉得安全的字符,予以放行!
其实,为什么用白名单方法放行允许的字符呢? 而不是去过滤一些字符串。原因刚刚说了,字符串太多了。过滤不过来!另外是,我们自己每个业务参数,会用到那些字符其实我们更清楚。另外有人会问,为什么不去屏蔽不用的字符呢?我们知道基础ascii码有0-127,128字符。往往我们,不会用到的字符可能更多呢,我们去过滤不会用到字符,有时候更困难!
正确检查jsonp callback方法
建议收到callback函数对它进行白名单字符范围检测!我们可以用一般函数检测规范来检查就可以了。 既然它是一个函数名称,一般都是字符+数字+下划线+点号(对象分割)。那么我们检测变得非常简单,代码类似如:
1 2 3 4 5 6 7 <?php $callback = isset($_GET['callback'])?$_GET['callback']:''; if(!preg_match("/^[0-9a-zA-Z_.]+$/",$callback)) { exit('参数错误!'); }
后记:以上是分析一个jsonp xss漏洞过程。要检测一个站点是否有该漏洞,其实简单方法,就是看通过参数传入进去的特殊字符,是不是原原本本的response 返回出来。 如果有朋友问我,怎么样利用该漏洞,它能做点什么? 你可以把它比作一个蚁穴,能带来多大危害,看蚂蚁怎么样啃食啦!这些年,sql注入几乎难找了,不过xss漏洞是头号杀手。只要有xss漏洞出现,几乎可以做到无所不能,就看利用的人怎么用了。 以上漏洞,我反馈京东商城,这么好的一个网站,不能因为这个小小xss,给用户带来大的安全隐患了!最后,欢迎朋友提出自己建议!还有一个忘记说了,就是它的jsonp访问权限完全没有限制,下次再分享吧!
作者:程默的博客 QQ:8292669
原文网址:http://blog.chacuo.net/304.html
订阅保持关注:http://blog.chacuo.net/feed
本文版权归作者所有,欢迎转载,请务必添加原文链接。