当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-060216

漏洞标题:mcms手机建站之星任意用户信息(包括密码)修改(不包括管理员)

相关厂商:mcms.cc

漏洞作者: phith0n

提交时间:2014-05-12 11:21

修复时间:2014-08-07 11:22

公开时间:2014-08-07 11:22

漏洞类型:非授权访问/权限绕过

危害等级:中

自评Rank:10

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-05-12: 细节已通知厂商并且等待厂商处理中
2014-05-12: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2014-07-06: 细节向核心白帽子及相关领域专家公开
2014-07-16: 细节向普通白帽子公开
2014-07-26: 细节向实习白帽子公开
2014-08-07: 细节向公众公开

简要描述:

mcms手机建站之星任意用户信息(包括密码)修改,可惜不能改管理员。

详细说明:

文件 plugin/gov.user/index.php 188行

function m__edit() {
global $dbm;
$params = array();
if (!is_numeric($_POST['user_id'])) die('{"code":"210","msg":"会员UID必须是数字"}');
// 验证会员信息是否合法
if (empty($_POST['uname'])) die('{"code":"210","msg":"会员名不能为空"}');
//if (empty($_POST['pro'])) die('{"code":"200","msg":"请选择所在的省份"}');
//if (empty($_POST['city'])) die('{"code":"201","msg":"请选择所在的城市"}');
//$rules = "/\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/";
//if (trim($_POST['uemail']) != '' && !preg_match($rules, $_POST['uemail'])) die('{"code":"270","msg":"请正确填写邮箱格式!"}');
$params['uname'] = $_POST['uname'];
$params['uemail'] = isset($_POST['uemail']) && $_POST['uemail']!= '' ? $_POST['uemail'] : '';
$params['uphone'] = isset($_POST['uphone']) && trim($_POST['uphone']) != '' ? trim($_POST['uphone']) : '';
$params['uqq'] = isset($_POST['uqq']) && trim($_POST['uqq']) != '' ? trim($_POST['uqq']) : '';
/*$params['motto'] = isset($_POST['motto']) && !empty($_POST['motto']) ? htmlspecialchars($_POST['motto']) : '';*/
if (intval($_POST['user_id']) > 0) {
if (isset($_POST['upass']) && $_POST['upass'] != '') {
if (strlen($_POST['upass']) < 5 || strlen($_POST['upass']) > 20) {
die('{"code":"280","msg":"密码不符合要求,必须5到20字符"}');
}
if ($_POST['upass'] != $_POST['re_pass']) die('{"code":"270","msg":"两次密码不一致"}');
$params['upass'] = helper :: password_encrypt($_POST['upass']);
}
$where = " user_id ='" . $_POST['user_id'] . "'";
$res = $dbm -> single_update(TB_PREFIX . "user_list", $params, $where);
if (empty($res['error'])) {
die('{"code":"0","msg":"更新会员资料成功"}');
}
die('{"code":"280","msg":"更新会员资料失败,请核实后再添加"}');
}
}


m__edit函数,没有进行权限检查,导致能够修改任何用户信息。用户的user_id通过POST传来。想改哪个用户信息,直接写它的user_id即可。
可惜的是,管理员用户不在用户表中,所以没法修改管理员信息。

漏洞证明:

首先我注册了两个用户,见数据库:

09.jpg


登录其中的654321:

08.jpg


向plugins/gov.user/index.php?tpl=ucenter&m=edit提交数据包,修改user_id=1的用户的信息(用户名和密码):

10.jpg


如上图,提示修改成功。
我们再来到数据库,就能看到user_id=1的用户信息已经变了:

11.jpg

修复方案:

user_id取session中的值,不要取post数据中的值。

版权声明:转载请注明来源 phith0n@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-08-07 11:22

厂商回复:

2014-04-19:已更新

最新状态:

暂无