漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2015-0150759
漏洞标题:KingCms最新版v9任意用户密码重置
相关厂商:KingCms
漏洞作者: 路人甲
提交时间:2015-11-04 18:34
修复时间:2015-12-19 18:36
公开时间:2015-12-19 18:36
漏洞类型:设计缺陷/逻辑错误
危害等级:高
自评Rank:20
漏洞状态:未联系到厂商或者厂商积极忽略
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2015-11-04: 积极联系厂商并且等待厂商认领中,细节不对外公开
2015-12-19: 厂商已经主动忽略漏洞,细节向公众公开
简要描述:
KingCms最新版v9任意用户密码重置
详细说明:
在user/manage.php
298行 if($code <> $usercode) kc_tip('提交的参数不正确!','form');
通过比较$code和$usercode是否相同来重置密码
而$usercode = md5($rs['userid'] . $rs['email'] . $rs['salt']);
email是注册以后在个人资料里面再填的,所以基本上为空,那salt呢,再从数据库里看看salt
salt默认为空,也就是salt没用处,mail也基本不会更改,所以也为空,剩下userid是从10000开始注册的。
也就是说如果$usercode=md5($['userid'])
再看291行checkcode函数,cltr+shit+r跟踪这个函数
程序如何校验验证码呢?通过接收checkcode_id和checkcode_answer参数,然后通过checkcode_id到数据库中查询相应答案,比对checkcode_answer和数据库中的答案是否一致
那么我们可以通过抓取正常登录或者注册的包,停在这个页面上,数据库就会生成checkcode_id和checkcode_answer而不会被销毁掉
漏洞证明:
根据上面分析,重置官网http://**.**.**.**/,id为10000(admin)的用户密码,则code值为b7a782741f667201b54880c925faec4b,重置密码为wooyun123
先在官网登陆,burp抓包,定在这,不要forword前进
得到checkcode_id=1083,checkcode_answer=32
然后本地构造post表单
成功修改admin密码wooyun123
登录官网
后台有编辑模板功能,直接可以添加编辑php文件,可getshell,不过官网的default路径被故意删除了吧,默认编辑模板路径templates/default/,没有http://**.**.**.**/templates/default/路径,所以编辑的文件没有路径,导致无法getshell,正常情况是可以的,本地也是可以的
修复方案:
salt不要为空
mail在注册接口注册
验证码不要重复使用
版权声明:转载请注明来源 路人甲@乌云
漏洞回应
厂商回应:
未能联系到厂商或者厂商积极拒绝