csrf漏洞测试

问题描述 投票:0回答:1

我在机器 A 上使用 localhost 在 IIS 上托管了一个小型 MVC 应用程序。我的主页中有以下 html。这里的域名是B机的IP地址,用于测试目的。

<div class="row">
    <div class="col-md-4">
        <h2 class="jumbotron">You have won a prize!</h2>
        <p>
            To redeem your prize. Click this button.
        </p>
        <form action="http://target_IP_address/eline/webController/Populate" method="POST">
            <input type="hidden" name="dateF" value="3/16/2022 3:01:26 PM" />
            <input type="hidden" name="dateT" value="3/17/2022 3:01:26 PM" />
            <input type="submit" class="btn btn-primary btn-lg" value="Give me my prize" />
        </form>
    </div>  
</div>

现在,在机器 B 中,我登录到了存在漏洞的网站。然后,我单击一个链接,转到计算机 A 上托管的网站。当我到达该网站时,我单击

"submit"
按钮。这就是我的困惑开始的地方。机器 B 中没有发出此请求的记录。我确实在机器 A 中看到了该请求。这是我看到的。

我的印象是我会在机器 B 上看到该请求。因为我在机器 A 上看到了它,所以我确信我搞砸了。如果

response
缺少另一个自定义标头(csrf-token:一些唯一令牌),我实现的用于检查 csrf 攻击的修复应该将自定义标头(csrf-Detected:1)附加到
request
。由于此标头没有显示在“响应标头”部分中,因此我认为检查没有发生在
Populate
中的
webController
方法之前。谁能指出我做错了什么?

asp.net-mvc security csrf
1个回答
-1
投票

从 Microsoft 网站查看此页面

为了帮助防止 CSRF 攻击,ASP.NET MVC 使用防伪造令牌, 也称为请求验证令牌。


  1. 客户端请求包含表单的 HTML 页面。
  2. 服务器在响应中包含两个令牌。一个令牌作为 cookie 发送。另一个放置在隐藏的表单字段中。代币 是随机生成的,因此对手无法猜测这些值。
  3. 当客户端提交表单时,它必须将两个令牌发送回服务器。客户端将 cookie 令牌作为 cookie 发送,并且它 发送表单数据内的表单令牌。 (浏览器客户端 当用户提交表单时自动执行此操作。)
  4. 如果请求不包含两个令牌,服务器将不允许该请求。

要将防伪令牌添加到 Razor 页面,请使用 HtmlHelper.AntiForgeryToken 辅助方法:

@using (Html.BeginForm("Manage", "Account")) {
    @Html.AntiForgeryToken()
}

此方法添加隐藏表单字段并设置 cookie 令牌。

© www.soinside.com 2019 - 2024. All rights reserved.