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

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

缺陷编号: WooYun-2013-43885

漏洞标题: TCCMS某处设计缺陷,成功打入官网后台

相关厂商: teamcen.com

漏洞作者: 齐迹

提交时间: 2013-11-24 14:13

公开时间: 2014-02-22 14:14

漏洞类型:

危害等级: 高

自评Rank: 12

漏洞状态: 厂商已经确认

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

Tags标签: php源码审核 设计不当导致攻击界面扩大

1人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-11-24: 细节已通知厂商并且等待厂商处理中
2013-11-24: 厂商已经确认,细节仅向厂商公开
2013-11-27: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-01-18: 细节向核心白帽子及相关领域专家公开
2014-01-28: 细节向普通白帽子公开
2014-02-07: 细节向实习白帽子公开
2014-02-22: 细节向公众公开

简要描述:

TCCMS某处设计缺陷,成功打入官网后台!

详细说明:

问题发生在

app\controller\user.class.php

146行

code 区域
public function update() {
$_Obj = M ( 'user' );
if (($_POST ['info'] ['password'] !== $_POST ['password1'])) {
StringUtil::msgbox ( Config::lang ( "PWDNOTTHESAME" ), 'index.php?ac=users_info', 1 );
exit ();
}
$_Obj->create ();
if ($_POST ['info'] ['password'] != "" && ($_POST ['info'] [password] == $_POST ['password1'])) {
$_Obj->password = strlen ( $_POST ['info'] ['password'] ) > 15 ? $_POST ['info'] ['password'] : md5 ( $_POST ['info'] ['password'] );
}
if (empty ( $_POST ['info'] ['area'] )) {
$_Obj->area = "";
}
if (empty ( $_POST ['info'] ['city'] )) {
$_Obj->city = "";
}
//禁止修改管理员
$userObj = get ( "user", $_Obj->id );
if ($userObj->grade == 1) {
self::checkIsAdmin ();
}
//禁止修改别人的
$IsSelfData = Authen::checkIsSelfData ( $_Obj->id );
if (! $IsSelfData) {
$this->setValue ( "error", Config::lang ( "NOTRIGHT" ) );
$this->forward ( "error.html" );
exit ();
}
$_Obj->update ();
StringUtil::msgbox ( Config::lang ( "MODIFYSUCCESS" ), 'index.php?ac=user_info', 1 );
}



这里调用了 $_Obj->create ();

学TP!

然后在看看

$_Obj->create (); 这个里面什么情况



code 区域
public function create($datas = '') {
$data = array();
$data = $datas;
if (empty($data)) {
$data = $_POST['info'];
} elseif (is_object($data)) {
$data = get_object_vars($data);
} elseif (!is_array($data)) {
$msg = Config::lang("ILLEGALDATA");
exit($msg);
}
if (empty($_POST['info']) && empty($data)) { return false; }
$fieldsType = $this->types; //字段和默认值
$fieldsName = $this->fields; //字段和类型
$formKeyAry = array_keys($data); //post过来的所有$key
/* @var $key type */
foreach ($formKeyAry as $key) {
if (array_key_exists($key, $this->fields)) {
$val = isset($data[$key]) ? $data[$key] : NULL;
if (is_scalar($val)) {
if (false !== strpos($fieldsType[$key], 'int')) {
$val = intval($val);
} elseif (false !== strpos($fieldsType[$key], 'float') || false !== strpos($fieldsType[$key], 'double')) {
$val = floatval($val);
}
}
if (!is_null($val)) {
$this->$key = $val;
}
if (($data[$key] == "" || $data[$key] == NULL || $data[$key] === 0) && $fieldsName[$key] != "") {
$this->$key = $fieldsName[$key];
}

}
}
return $this;
}



$_POST['info'][xx] xx 直接是数据库字段 可以成功修改!





http://**.**.**.**/index.php?ac=user_info

页面通过修改表单名称 成功把注册的普通帐号修改为了管理员帐号

漏洞证明:

成功打入后台!



什么注入都弱爆了!

直接执行SQL 好舒服



tcms_admin.jpg

修复方案:

你们懂的!

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


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

确认时间:2013-11-24 16:10

厂商回复:

谢谢关注TCCMS开源项目。
有前台会员模块的用户受到影响,官方已经将会下一个版本采取后台登陆URL自定义,会员编辑判断是否管理员身份。

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2013-11-24 14:38 | 麻花藤 ( 路人 | Rank:15 漏洞数:1 | ด้้้้้็็็็็้้้้้็็็็...)
    0

    MARK!!!远看洞主在乌云是这么牛B,你家人知道吗

  2. 2013-11-24 16:22 | TCCMS-PHP内容管理系统(乌云厂商)
    0

    有前台会员系统的用户修复办法: 在app/controller/user.class.php 找到 if ($userObj->grade == 1) { self::checkIsAdmin (); } 修改为: if ($userObj->grade == 1 || $_POST["info"]["grade"] == 1) { self::checkIsAdmin (); }

  3. 2013-11-24 16:26 | 小川 认证白帽子 ( 核心白帽子 | Rank:1583 漏洞数:236 | 一个致力要将乌云变成搞笑论坛的男人)
    0

    额,都进后台了,怎么才评5

  4. 2013-11-24 16:41 | xfkxfk 认证白帽子 ( 核心白帽子 | Rank:2299 漏洞数:351 | 呵呵!)
    0

    因该是走小厂商了

  5. 2013-11-24 17:21 | 齐迹 ( 普通白帽子 | Rank:804 漏洞数:104 | 重庆地区招聘安全工程师。sec.zbj.com欢迎...)
    0

    @TCCMS-PHP内容管理系统 如果这样修复 还会有问题! @小川 我没有getshell页没有 drop 所以他们就给我低了!

  6. 2013-11-24 19:53 | TCCMS-PHP内容管理系统(乌云厂商)
    0

    @齐迹 原来这个rank分数是对你们专业级别的评级。 继续找漏洞,下次给你高分哈,不过希望不会有新漏洞出现了

登录后才能发表评论,请先 登录