SOME - Same Origin Method Execution

支持 HackTricks

Same Origin Method Execution

有时你可以在页面中执行一些有限的 JavaScript。例如,在你可以 控制一个将被执行的回调值的情况下。

在这些情况下,你可以做的最好的事情之一是 访问 DOM 来调用你能找到的任何 敏感操作(比如点击一个按钮)。然而,通常你会在 没有任何有趣内容的 DOM 的小端点 中发现这个漏洞。

在这些场景中,这种攻击将非常有用,因为它的目标是能够 利用来自同一域的不同页面中的有限 JS 执行 来进行更有趣的操作。

基本上,攻击流程如下:

  • 找到一个 你可以利用的回调(可能限制为 [\w\._])。

  • 如果没有限制且你可以执行任何 JS,你可以像常规 XSS 一样利用它。

  • 受害者打开一个攻击者 控制的页面。

  • 页面将自己不同的窗口 中打开(新窗口将有对象 opener 引用初始窗口)。

  • 初始页面 将加载 有趣的 DOM 所在的 页面

  • 第二个页面 将加载 利用回调的易受攻击页面,并使用 opener 对象来 访问并在初始页面中执行某些操作(现在包含有趣的 DOM)。

请注意,即使初始页面在创建第二个页面后访问了一个新 URL,第二个页面的 opener 对象仍然是对新 DOM 中第一个页面的有效引用

此外,为了使第二个页面能够使用 opener 对象,两个页面必须在同一源。这就是为什么为了利用这个漏洞,你需要找到某种 同源的 XSS

Exploitation

Example

  • 你可以在 https://www.someattack.com/Playground/ 找到一个易受攻击的示例。

  • 请注意,在这个示例中,服务器 生成 JavaScript 代码将其添加 到基于 回调参数内容的 HTML 中:<script>opener.{callbacl_content}</script>。这就是为什么在这个示例中你不需要明确指示使用 opener

  • 还可以查看这个 CTF 文章:https://ctftime.org/writeup/36068

References

支持 HackTricks

Last updated