缺陷编号:WooYun-2015-0129817
漏洞标题:某P2P网贷行业垂直门户重置任意用户密码
相关厂商:北京银讯财富信息技术有限公司
漏洞作者:星零
提交时间:2015-07-29 19:25
公开时间:2015-09-12 19:26
漏洞类型:网络设计缺陷/逻辑错误
危害等级:中
自评Rank:5
漏洞状态:未联系到厂商或者厂商积极忽略
Tags标签:
2015-07-29: 积极联系厂商并且等待厂商认领中,细节不对外公开
2015-09-12: 厂商已经主动忽略漏洞,细节向公众公开
先说下什么是session覆盖漏洞?session是存储在服务端cookie是储存在客户端。cookie可以直接修改 但是session没有办法直接修改 因为储存在服务端。小子你能直接修改服务端存储的东西?
先说下什么是session覆盖漏洞?session是存储在服务端 cookie是储存在客户端。cookie可以直接修改 但是session没有办法直接修改 因为储存在服务端。小子你能直接修改服务端存储的东西?那么怎么办?首先如果session里面存储个 abc abc的值是123 那么如果我再次让服务端生成个 abc 里面的值是 456 那么456是不是就覆盖了123 那么现在服务端存储的abc的值不就是456了!那么session覆盖所产生的漏洞会出现在哪里呢?我在找回密码的时候想到了 重置密码最后一步的时候 sql语句里面的条件肯定是根据session的值(正常程序员是不会存在cookie当然也会有些SB程序员存在cookie)也就是 where xxx(某某字段)=(session里面的值)如何覆盖呢?实现重置任意用户密码呢? 那很简单 我们这么来弄!上图。首先正常的流程必须先走一遍 输入我们自己的手机号码
输入自己收到的验证码
输入我们要重置的新密码,保留该页面,先别提交:
在这里重复声明一下 他在执行sql语句的时候条件是根据session里面的值 那么我们来覆盖一下 怎么覆盖呢?
打开一个新选项卡,在忘记密码处输入目标手机号,提交:
可以看到session覆盖成功 然后我们在提交那个重置密码的页面 成功修改目标手机号密码 重置任意用户密码(因为session里面存储的修改密码的条件值已经被我们修改了)
如何修复session覆盖漏洞呢 很简单 在开始往session里面赋值的时候做一个 if 判断 如果session存在值了 就不重新赋值 就可以避免该漏洞!
未能联系到厂商或者厂商积极拒绝
漏洞Rank:8 (WooYun评价)
恩,这篇文章深入浅出啊。thanks
评分成功。
原文连接
的情况下转载,若非则不得使用我方内容。