模拟 CSRF 攻击

Posted

技术标签:

【中文标题】模拟 CSRF 攻击【英文标题】:Simulate CSRF Attack 【发布时间】:2011-09-30 01:16:29 【问题描述】:

我想来检查我的网站漏洞。我在我的 asp.net web 应用程序上尝试过,但未能模拟。所以请帮我模拟CSRF攻击。我已经通过 test.aspx 进行了模拟。

  <form name="form1" id="form1" runat="server" method="post" action="mysite.com">
 <script type="text/javascript">
        document.cookie[".ASPXAUTH"] = "someaspxauth";
        document.cookie["ASP.NET_SessionId"] = "somesessionid";
        document.form1.submit();
    </script>
</form>

我还缺少什么? 提前致谢。

【问题讨论】:

这是一篇关于 CSRF 和一般 OWSASP troyhunt.com/2010/11/… 的精彩文章 我写了一篇关于如何在 ASP.NET Core 中做到这一点的文章:davidklempfner.medium.com/… 【参考方案1】:

为了模拟 CSRF,您不会在恶意代码中包含 cookie 或会话信息。 CSRF 的全部意义在于执行的代码不知道您的会话或 cookie 信息。它只是假设浏览器会将其包含在对应用程序的请求中。

所以为了测试,假设你有一个页面 Transfer.aspx,它接受一个 POST 方法和 txtFrom、txtTo 和 txtAmount 的参数,带有一个按钮 btnSubmit,并且你想尝试从账户 1 转移到账户 2。你的恶意代码可能是这样的:

<form action="http://www.mysite.com/Transfer.aspx" method="post">
    <input type="hidden" name="txtFrom" value="1" />
    <input type="hidden" name="txtTo" value="2" />
    <input type="hidden" name="txtAmount" value="500" />
    <input type="hidden" name="__VIEWSTATE" value="[PUT VIEWSTATE VALUE HERE]" />
    <input type="hidden" name="__EVENTVALIDATION" value="[PUT EVENTVALIDATION VALUE HERE]" />
    <input type="submit" name="btnSubmit" value="Go" />
</form>

您必须提前知道 viewstate 和 eventvalidation 的值是什么,因此您需要在正确登录后从您的页面复制这些值。这假定您的视图状态是恒定的,无论用户或会话如何。

现在您有一个恶意页面。如果您在一个选项卡上登录,请在另一个选项卡中打开它并提交,如果您容易受到攻击,那么您的转移将发生。原因是属于 mysite.com 的 cookie 已发送,这意味着将使用您在另一个选项卡上处于活动状态的会话。

要解决此问题,您需要在帖子中包含一个唯一的每次会话值。这很容易通过使用 ViewStateUserKey 并将其设置为您的 ASP.NET 会话 ID 或它的哈希来完成。这将使您的 __VIEWSTATE 值在每个会话中都是唯一的,这意味着您将不再容易受到攻击,因为没有人可以预测您的 __VIEWSTATE 值会是什么。

【讨论】:

以上是关于模拟 CSRF 攻击的主要内容,如果未能解决你的问题,请参考以下文章

sql注入,xss攻击,csrf(模拟请求)

Flask模拟实现CSRF攻击的方法

什么是CSRF攻击,如何预防

浅谈Web前端安全策略xss和csrf,及又该如何预防?

WEB攻击手段及防御第3篇-CSRF

CSRF攻击的BurpSuite实战