SOME - Same Origin Method Execution
Same Origin Method Execution
有时你可以在页面中执行一些有限的 JavaScript。例如,在你可以 控制一个将被执行的回调值的情况下。
在这些情况下,你可以做的最好的事情之一是 访问 DOM 来调用你能找到的任何 敏感操作(比如点击一个按钮)。然而,通常你会在 没有任何有趣内容的 DOM 的小端点 中发现这个漏洞。
在这些场景中,这种攻击将非常有用,因为它的目标是能够 利用来自同一域的不同页面中的有限 JS 执行 来进行更有趣的操作。
基本上,攻击流程如下:
找到一个 你可以利用的回调(可能限制为 [\w\._])。
如果没有限制且你可以执行任何 JS,你可以像常规 XSS 一样利用它。
让 受害者打开一个 由 攻击者 控制的页面。
页面将自己 在 不同的窗口 中打开(新窗口将有对象
opener
引用初始窗口)。初始页面 将加载 有趣的 DOM 所在的 页面。
第二个页面 将加载 利用回调的易受攻击页面,并使用
opener
对象来 访问并在初始页面中执行某些操作(现在包含有趣的 DOM)。
请注意,即使初始页面在创建第二个页面后访问了一个新 URL,第二个页面的 opener
对象仍然是对新 DOM 中第一个页面的有效引用。
此外,为了使第二个页面能够使用 opener 对象,两个页面必须在同一源。这就是为什么为了利用这个漏洞,你需要找到某种 同源的 XSS。
Exploitation
你可以使用这个表单来 生成 PoC 来利用这种类型的漏洞:https://www.someattack.com/Playground/SOMEGenerator
为了找到一个 HTML 元素的点击 DOM 路径,你可以使用这个浏览器扩展:https://www.someattack.com/Playground/targeting_tool
Example
你可以在 https://www.someattack.com/Playground/ 找到一个易受攻击的示例。
请注意,在这个示例中,服务器 生成 JavaScript 代码 并 将其添加 到基于 回调参数内容的 HTML 中:
<script>opener.{callbacl_content}</script>
。这就是为什么在这个示例中你不需要明确指示使用opener
。还可以查看这个 CTF 文章:https://ctftime.org/writeup/36068
References
Last updated