又一种不用括号调用 JavaScript 函数的方法 — Hacker News 中文摘要
来源:blog.ikaes.de — 207 分 · by aragonite
📋 概述
安全研究者 Bartosz 给出一种新的 XSS 载荷写法:完全不写括号也能调用任意函数,从而绕过依赖括号的过滤规则。做法是覆盖 Error 对象的 prepareStackTrace——访问 error.stack 时会被触发——它的参数签名与 Function 构造函数一致,于是可以用来生成函数;再通过原型污染改写 Array.prototype.toString 或 Object.prototype.message,让堆栈数组转成想要的代码字符串,最后覆盖 valueOf 让对象在被当作原始值使用时触发函数。文章附有可直接在浏览器控制台验证的完整载荷。
🔑 核心要点
- 新载荷完全不使用括号即可调用任意函数,可用于绕过依赖括号的过滤。
- 核心是覆盖 Error 的 prepareStackTrace,它在访问 stack 属性时触发,参数签名与 Function 构造函数一致。
- 通过覆盖 Array.prototype.toString 或污染 Object.prototype.message 控制堆栈数组转成的字符串。
- 最后用覆盖 valueOf 的技巧,让对象在被当作原始值使用时触发函数。
- 作者给出了可直接在浏览器控制台运行的完整载荷。
💡 金句
i found yet another way to invoke arbitrary functions in javascript without using parentheses
👍 0
👎 0
← 返回 Hacker News 首页