几年前的文章了,现在才学习... 真的辣鸡,写一下自己的理解,可能会有很多问题,请多多指教~

先了解一下什么是JSONP:
    JSONP是一种跨域请求资源的解决方案,JSONP可以绕过AJAX遵循的同源策略。
    更容易理解的解释就是:利用“script标签可以跨域请求,并且把返回的结果当作js来执行”的特点来获取第三方的资源
    类似这样:<script src="http://verysecurebank.ro/getAccountTransactions"></script&gt;
    
    为了让数据使用更便捷,第三方资源使用JSON格式输出结果
    当使用AJAX请求同样的地址时将会出现这样的错误:
    

Callback:
    其实callback很好理解,同样是为了更好的使用第三方数据,第三方允许"请求方"使用自定义的callback名称
    还是上面的例子:http://verysecurebank.ro/getAccountTransactions&callback=testing 这里的callback参数是可以自定义的,可以是任何名字 (当然有些接口不允许这么做)
        

试着画了一张正常请求的图
    

安全问题:
    当攻击者知道返回资源的地址时,且资源中存在隐私信息。是不是可以构造攻击页面,诱导用户访问并获取用户隐私呢?
    怎么说呢...
    用户在访问qq.com时页面会生成对应的Cookie,当访问子域game.qq.com/user?callback=blabla 时页面将返回game.qq.com下的用户信息
    攻击者构造了攻击页面http://www.attack.com/phishing 当用户访问时将会执行攻击页面中的js,恶意的js创建了script标签,并以用户的名义加载game.qq.com/user?callback=blabla

    就像这样:
    (同事竟然表示看不懂图...简单解释下)
    1.访问qq.com并通过认证后会生成qq.com下的Cookie
    2.主动或被动访问了恶意页面,恶意页面又携带了向game.qq.com发送请求的恶意js。那么用户的浏览器会解析并执行该js:从game.qq.com获取JSON后发送给恶意js指定的接受页面。
    

防护与绕过防护:
    厂商常用的解决方法是检查Referer是否合法,因为请求是从攻击页面发起的,所以Referer是攻击页面的Url。
    这里有个添加了防护的列子:
    直接请求这个地址,提示的是没有登陆。
    
    当我手动去修改Header为http://game.qq.com 时成功返回了我的信息:
    

    在浏览器修改Header算什么...... 自..我...安慰?    
        空Referer绕过
                当Referer等于空时,可以绕过大部分网站的检测
                使用iframe标签并利用js的伪协议可以实现无Referer的请求,就像这样:
        &lt;iframe src=&quot;javascript:&#39;&lt;script src=\&#39;http://verysecurebank.ro/getAccountTransactions&amp;callback=testing\&#39;&gt;&lt;/script&gt;&lt;script&gt;alert(\&#39;Hello\&#39;)&lt;/script&gt;&#39;&quot;&gt;&lt;/iframe&gt;

     301跳转绕过
        首先你需要一个该域名或子域的跳转漏洞,然后直接用js加载这个漏洞地址,漏洞地址指向返回JSON数据的接口地址就好了
        这里因为手上没有例子,就说了... =。=

放个实例吧
    忙着搬砖,临时找了个新浪微博游戏子站的漏洞
    直接丢利用代码吧,特别特别好理解
    
    首先是接口地址:http://game.weibo.com/test.php?callback=HelloWeibo&reqid=101001016
    create_noref_ifr是创建没有referer的iframe标签的函数,接受一个地址和一串js脚本
    script变量内容也很好理解的,当script标签加载了接口之后,会生成一个HelloWeibo变量,经过JSON处理之后alert就好了

    有表哥说获取到的信息要怎么发送到自己这边。。其实也很简单的。
    就像alert一样,改成一个请求就好了,把信息当作参数,请求自己的接受端。
    像这样
    
    为了能够成功接收ajax的请求,需要修改Header
    

可以用在哪些地方
        信息收集挺好的,如果你只知道一个人的QQ,社工裤和搜索引擎又没有他的其他结果。你可以试着收集很多这样的接口,然后发他一个“看似正常的网站” 嗯

参考:
        http://blog.knownsec.com/2015/03/jsonp_security_technic/ &nbsp; 这个写好很好的 =。=

最后
    谢谢=。=

点击收藏 | 1 关注 | 0
登录 后跟帖