【问题标题】:How to implement an XSRF attack via auto-submitting form in iframe?如何通过 iframe 中的自动提交表单实现 XSRF 攻击?
【发布时间】:2020-03-27 13:37:02
【问题描述】:

我正在开发单页应用程序并选择用于用户会话、cookie 或本地存储的方案。特别是,我正在考虑 CSRF 攻击场景。恕我直言,最合理的 CSRF 攻击方案是在不可见的 iframe 中自动提交表单。但它是如何工作的呢?

假设我是maliciouswebsite.net 的开发人员,在我的页面上我正在创建一个不可见的 iframe,指向bank.com 网站上的某个页面,目的是让用户访问maliciouswebsite.net 并登录@ 987654324@,通过在不可见的 iframe 中自动提交表单,不情愿地将钱寄给我。

但在这种情况下,iframe 中的代码将无法从 maliciouswebsite.net 编写脚本,因为它将被视为跨域,并且浏览器将不允许 maliciouswebsite.net 主框架中的 javascript 使用 @ 的元素进行操作987654327@隐形框。

另一种情况是maliciouswebsite.net 只是呈现一个不可见的 iframe,其形式为 action=bank.com/api/transfer_money?...。所以这个 iframe 的 Origin 仍然是maliciouswebsite.net。但在这种情况下,表单不会在bank.com 看到用户的 cookie,也不会被允许做任何事情,对吧?

【问题讨论】:

    标签: iframe cross-domain csrf


    【解决方案1】:

    另一种情况是,malwarewebsite.net 只是呈现一个 形式为 action=bank.com/api/transfer_money 的隐形 iframe?.... 所以 这个 iframe 的来源仍然是恶意网站。但在这样的 如果表单在 bank.com 上看不到用户的 cookie,也不会 什么都可以做,对吧?

    是的,如果使用 IFrame,这就是它的工作方式。

    基本上,它从一个页面开始,其中包含一个自动提交到另一个域的表单,就像你说的那样。示例见this answer

    然后为了不提醒用户表单正在提交,攻击者将带有该表单的页面嵌入到隐藏的 IFrame 中。

    只要用户已经登录bank.com,浏览器就会自动发送 cookie。请记住,表单不需要查看 cookie (maliciouswebsite.net),只有目标域需要查看 (bank.com)。

    【讨论】:

    • 啊,所以,虽然maliciouswebsite.net上的javascript无法访问bank.com域相关的cookie,但是纯html请求可以强制浏览器发送cookie,与bank.com相关,来自maliciouswebsite.net - 这就是 XSRF 的重点。
    • 第一个使用脚本自动点击的场景可能是不可能的。但是可以使 iframe 透明且巨大,这样浏览器就会将任何用户点击maliciouswebsite.net 解释为点击bank.com 的提交按钮。这就是点击劫持攻击,与 XSRF 不同。我们应该使用x-frame-options 标头来保护它。
    猜你喜欢
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多