尝试伪造合法token值绕过CSRF


token概述

token是为了防止csrf而衍生的技术。黑客可以通过xss来获取用户的cookie,理论上也能获取当时页面上的token值,但是也仅仅是当时页面上的token值,如果与用户进行其他页面的跳转从而获取新的token值,xss是无法获取的。因此,有效地防范了csrf,但是能否伪造一个我们所需要的token值,配合xss获取的cookie值进行我们想要的操作。

实验猜想

如下场景

1)在更改密码的界面上存在随机token,但是该页面上不存在xss漏洞。

2)通过其他页面利用xss漏洞获取用户的cookie

3)然后恶意用户在 修改密码页面 获取的token值配合获取的cookie进行数据的提交操作(伪造的token也是通过对服务器的合法请求)

4)如果随机的token不与cookie进行绑定存储的话,理论上可以达到伪造token的行为

环境准备

1)phpstudy2016

2)DVWA :CSRF(high)

3)准备两个用户

账号类型 账号 密码
正常用户 admin 123456
恶意用户 1337 charley

操作过程

1)正常用户更改密码,但是提交错误的token

正常的token

image-20220105145840159

更改token

image-20220105145917720

旧密码能够正常登陆,证明修改密码行为失败,只有合法的token才能正常修改用户密码。

2)尝试伪造token,提交表单数据

正常用户的随机token值

81110ab1eee400821304d1e7a2b56575

恶意用户的随机token值

410db2df5528bdb4804813e0c887dc2b

3)将正常用户的token进行更改,用伪造的token进行覆盖(等同于:恶意用户获取正常用户的cookie配合自己伪造的token提交)

image-20220105150410688

4)密码更改成功,证明伪造的token可用

image-20220105151029632

总结

token应用需要注意:

1)绑定cookie与随机token,防止上述情况的发生

2)约束token的时效性,防止伪造的token可以一直使用,或未使用但长期贮存等待使用

相关