TOKEN,即令牌的意思,通过在提交的页面中增加TOKEN数字,而且每个用户的TOKEN数字都不一样,以便区分对待。那么,我们只要可以获得提交页面的正确的TOKEN,就可以进行CSRF的链接提交。
TOKEN获得的渠道与推测
- 登录到目标用户的账号里,修改个人信息资料的时候,系统会给此账户发送一个TOKEN,用户提交数据。注意观察这个TOKEN是一直都不变,还是每次都变。
- 如果知道TOKEN的算法,是否可以用算法推算出一个TOKEN。单服务器端是有记录的,比对的时候可能会找不到记录。
- 把目标客户刚刚获取到的TOKEN借用过来。特别注意的是,这个TOKEN是否可以反复利用。
我们可以测试的是
- 这个TOKEN是不是可以反复使用?
- 在页面里试图找找有没有TOKEN的js算法,权当学习,可以尝试利用一下。
- 是否可以真的通过iframe的形式,把TOKEN提前借过来。
采用iframe的dom思路,将
http://192.168.182.147/vul/csrf/csrftoken/token_get_edit.php
包裹到自动提交的html页面内部,通过iframe标签定位,即可以读取。 但现在的浏览器都有同源策略了。不在同一个域名下,或者没有明确指明是哪个域名包含自己的,都没有权限存储到这个iframe的内容。
总结
加了TOKEN以后的CSRF明显难搞了,所以TOKEN是一个不错的考点。
其它防范措施
- 增加验证码:一般用于防止暴力破解,也可以用在其它重要信息操作的表单中
- 安全的会话管理:
- 不要在客户端保存敏感信息,如身份认证信息
- 设置会话过期机制,如15分钟内无操作则自动登录超时
- 访问控制安全管理:
- 敏感信息修改时需要对身份进行二次认证,如修改密码时,需要校验旧密码
- 敏感信息的修改使用POST,而不是GET
- 通过HTTP头部中的Referer来限制原页面
如何突破
把上面的不可能,变成可能!
