漏洞概要
关注数(24)
关注此漏洞
漏洞标题:ThinkSNS 4.0 一处设计缺陷(可伪造任意人发朋友圈)
提交时间:2015-07-06 12:31
修复时间:2015-10-09 12:32
公开时间:2015-10-09 12:32
漏洞类型:设计缺陷/逻辑错误
危害等级:中
自评Rank:10
漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞
Tags标签:
无
漏洞详情
披露状态:
2015-07-06: 细节已通知厂商并且等待厂商处理中
2015-07-11: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2015-09-04: 细节向核心白帽子及相关领域专家公开
2015-09-14: 细节向普通白帽子公开
2015-09-24: 细节向实习白帽子公开
2015-10-09: 细节向公众公开
简要描述:
通常用于诈骗!
详细说明:
官方的demo已经是4.0,可惜下不到源码
翻来看看ThinkSNS 3.0的源码,发现一处严重的设计缺陷
apps\public\Lib\Action\AccountAction.class.php 下doSaveProfile方法为保存用户信息操作
修改用户昵称这里$uname 是你想修改的昵称(你是A,你想修改成B)$oldName是你以前的昵称,我们跟进$res = model('Register')->isValidName($uname, $oldName);这个函数
这里主要经过三次审核:
1.是否使用预保留的名称array('name', 'uname', 'admin', 'profile', 'space');
2.判断昵称长度是否是2-10个汉字之间;
3.判断用户昵称是否被使用。
我们直接看看第三处的判断逻辑:用户昵称是否被使用
if(($name != $old_name) && $this->_user_model->where('`uname`="'.mysql_escape_string($name).'"')->find()) {
如果$name != $old_name,则进入if。但是old_name可被参数传入,我直接更改old_name和name为任意的同一个人就绕过该if逻辑了!
同时我们看看安装好ThinkSNS 3后数据库人员信息:
管理员的昵称是“管理员”,不在保留的名称array('name', 'uname', 'admin', 'profile', 'space')里,所以也可以更改为管理员。。。
漏洞证明:
现在官方demo是ThinkSNS 4版本的,注册一个账户,编辑我的个人信息
http://demo.thinksns.com/ts4/index.php?app=public&mod=Account&act=index
在朋友圈里看到一个人Clay
http://demo.thinksns.com/ts4/index.php?app=public&mod=Profile&act=index&uid=32323
貌似是个技术总监,那我们抓包更改我的个人信息试下:
发现我也是技术总监了!
修复方案:
版权声明:转载请注明来源 路人甲@乌云
漏洞回应
厂商回应:
危害等级:无影响厂商忽略
忽略时间:2015-10-09 12:32
厂商回复:
漏洞Rank:2 (WooYun评价)
最新状态:
暂无