漏洞概要
关注数(24)
关注此漏洞
漏洞标题:ThinkSNS任意用户登陆+后台管理绕过
提交时间:2013-11-15 22:56
修复时间:2014-02-13 22:57
公开时间:2014-02-13 22:57
漏洞类型:非授权访问/权限绕过
危害等级:高
自评Rank:20
漏洞状态:厂商已经确认
Tags标签:
无
漏洞详情
披露状态:
2013-11-15: 细节已通知厂商并且等待厂商处理中
2013-11-17: 厂商已经确认,细节仅向厂商公开
2013-11-20: 细节向第三方安全合作伙伴开放
2014-01-11: 细节向核心白帽子及相关领域专家公开
2014-01-21: 细节向普通白帽子公开
2014-01-31: 细节向实习白帽子公开
2014-02-13: 细节向公众公开
简要描述:
大概三个月前找到的,没想到还是没补
详细说明:
在/apps/page/Lib/Action/DiyAction.class.php 205行 setSession函数:
setSession函数用POST传入的name和base64编码的layout为$_SESSION赋值。
在/apps/admin/Lib/Action/AdministratorAction.class.php的_initialize函数是负责判断当前用户是否有后台管理员权限的:
有两个点是验证权限的地方,跟进去
先看checkAdminLogin函数
/addons/model/PassportModel.class.php checkAdminLogin()
这段代码判断若$_SESSION['adminLogin']存在那么直接返回true,因此可以通过前面的setSession函数设置一下$_SESSION['adminLogin']就可以了,不必关心它的值。
看CheckPermission函数:
/core\OpenSociax\functions.inc.php:987
在跟踪的时候会进入$Permission->check($action),因此继续跟下去:
/addons/model/PermissionModel.class.php
$GLOBALS['ts']['mid']的值是当前用户的id,loadRule函数根据这个从系统中读取当前id用户所拥有的权限,我们需要把这里的mid改1才能通过校验。
于是在程序入口找了一遍$GLOBALS['ts']['mid']是怎么被赋值的:
/core/OpenSociax/Action.class.php:
这里使用了intval从session中取出mid放到globals里面。
需要注意的是intval的原理,截取第一个数字作为函数的返回值,如intval('1a')=1,intval('a')=0,intval('a1a')=0
然后找到%D5的base64编码是1开头的,所以给$_SESSION['mid']设置为%D5
漏洞证明:
1. POST index.php?app=page&mod=Diy&act=setSession
name=mid&layout=%D4
2. POST index.php?app=page&mod=Diy&act=setSession
name=adminLogin&layout=test
修复方案:
版权声明:转载请注明来源 猪头子@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:10
确认时间:2013-11-17 02:33
厂商回复:
非常感谢,一个非常严重的漏洞。
最新状态:
暂无
漏洞评价:
评论
-
2013-11-15 23:39 |
疯子 ( 普通白帽子 | Rank:242 漏洞数:42 | 世人笑我太疯癫,我笑世人看不穿~)
-
2013-11-16 11:07 |
李旭敏 ( 普通白帽子 | Rank:469 漏洞数:71 | ฏ๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎...)
-
2013-11-17 06:33 |
s0mun5 ( 普通白帽子 | Rank:493 漏洞数:24 | .)
-
2013-12-06 15:44 |
zzR ( 核心白帽子 | Rank:1382 漏洞数:122 | 收wb 1:5 无限量收 [平台担保])
-
2014-04-08 22:23 |
江南的鱼 ( 普通白帽子 | Rank:137 漏洞数:15 | 天生庸才!)
<?phpecho base64_encode("%D5");?>JUQ1intval 后,值为0貌似这里有问题!
-
2014-04-10 16:04 |
猪头子 ( 普通白帽子 | Rank:189 漏洞数:35 | 自信的看着队友rm -rf/tar挂服务器)
@江南的鱼 =。= 哪里有问题了,%D5是URL编码,正确的写法是base64_encode(urldecode("%d5"))
-
2014-04-10 23:03 |
江南的鱼 ( 普通白帽子 | Rank:137 漏洞数:15 | 天生庸才!)
@猪头子 学习了。确实是我测试时搞错了!忽视了URL编码