我想模拟CSRF攻击来检查我的网站漏洞。我在我的asp.net webapplication上试了但是没能模拟。所以请帮我模拟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>
我还缺少什么? 提前谢谢。
答案 0 :(得分:6)
要模拟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值是什么,因此当您正确登录时,您需要从页面中复制该值。这假定您的viewstate是常量,无论用户或会话如何。
现在你有一个恶意页面。如果您在一个选项卡上登录,请在另一个选项卡中打开,然后提交,如果您容易受到攻击,则会进行转移。原因是发送了属于mysite.com的cookie,这意味着将使用在另一个选项卡上存活的会话。
要解决此问题,您需要在帖子中包含唯一的每会话值。通过使用ViewStateUserKey并将其设置为ASP.NET会话ID或其哈希,可以轻松完成此操作。这将使您的__VIEWSTATE值在每个会话中都是唯一的,这意味着您将不再容易受到攻击,因为没有人可以预测您的__VIEWSTATE值将是什么。