尝试伪造合法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
更改token
旧密码能够正常登陆,证明修改密码行为失败,只有合法的token才能正常修改用户密码。
2)尝试伪造token,提交表单数据
正常用户的随机token值
81110ab1eee400821304d1e7a2b56575
恶意用户的随机token值
410db2df5528bdb4804813e0c887dc2b
3)将正常用户的token进行更改,用伪造的token进行覆盖(等同于:恶意用户获取正常用户的cookie配合自己伪造的token提交)
4)密码更改成功,证明伪造的token可用
总结
token应用需要注意:
1)绑定cookie与随机token,防止上述情况的发生
2)约束token的时效性,防止伪造的token可以一直使用,或未使用但长期贮存等待使用