CSRF 原理与相关利用(本站用户头像重置漏洞,已修复)

3 条回复
36 次浏览

已修复,请勿测试!

CSRF 又叫跨站请求伪造(Cross-site request forgery),主要是伪造用户请求,在用户无感知的情况下利用用户已有身份发起请求。

比如昨天我发了两个帖子,一个是控制特定用户头像替换为指定头像的(比如站长点进去会被替换为我的 logo 图片),一个是让用户头像重置为默认头像。

其原理是利用了 cookie 的同源策略,在请求同一站点时 cookie 会自动附加,所以在用户登录后访问 2libra.com 的所有路径,浏览器都会自动附加 cookie,有了这个特性后就可以利用当前登录用户身份完成某些操作。

本站修改头像使用了 get 请求,且无 CSRF 校验,导致漏洞产生,get 请求不会产生跨域问题,不需要嵌入脚本,只要让用户浏览器发出请求即可,使得攻击难度大大降低。

其次是利用图片自动加载的特性实现请求的发送,本站没有采用白名单机制加载图片,亦未采用图片黑名单机制(比如过滤本站地址,禁止请求 api 路径),所以在添加图片的时候将地址改为头像更新的地址即可实现,比如修改为:https://2libra.com/api/users/update-avatar,MD 语法渲染图片为 img 标签,img 自动载入图片等同于发送 get 请求,实现更新头像的操作。
image
图片自动加载发出请求

整个流程就是:
发布一个修改了图片地址为头像更新 api 的帖子--用户打开帖子--浏览器自动请求图片(请求 api)--头像被重置。

引申出来还有另一个严重问题,已经反馈给站长完成修复了,这里就不说了,如果站长认为可以说我再说,也是比较经典的案例。

夜猫
Admin

该问题已修复了不用移动到黑洞节点,很感谢你的提示。

站内的应该全部的修改接口改为了POST,也对你说的文件名可信任处理漏洞做了封堵也可以做讨论。

漏洞说不准还有的,大家发现的时候希望不要拿用户做测试 😄,可以在黑洞节点上做讨论。

种子用户
OP

发这个没有别的意思,正好是一个案例给其他开发者一个提醒,同时更好的理解经典漏洞,CSRF 很老了,因为现在很多站点是前后端分离的,实际没有使用 cookie,而是自己附加了请求头(authorization 之类的),所以一般不会有 CSRF,而本站采用了 cookie 与 get 请求,所以导致漏洞产生,目前修改为 POST 是有效杜绝了,要不然还会因为相对路径导致 logout 被利用,用户点进去就被退出登录。

发表一个评论

R保持