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

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

缺陷编号:wooyun-2014-075384

漏洞标题:hdcms 多处XSS可打后台和主页

相关厂商:后盾网

漏洞作者: 只发通用型

提交时间:2014-09-10 10:56

修复时间:2014-12-09 10:58

公开时间:2014-12-09 10:58

漏洞类型:xss跨站脚本攻击

危害等级:高

自评Rank:20

漏洞状态:未联系到厂商或者厂商积极忽略

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-09-10: 积极联系厂商并且等待厂商认领中,细节不对外公开
2014-12-09: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

学tp框架开发看的是后盾网的教程,老师讲得挺好的,顺手挖了一下后盾cms的漏洞
一个XSS rank5 4个一共rank20 哈哈哈哈...
源码地址https://git.oschina.net/houdunwang/hdcms/repository/archive?ref=master

详细说明:

第一处和第二第三处:用户中心---修改昵称
漏洞出在/hd/Hdcms/Member/Control/ProfileControl.class.php 15行~43行

//修改昵称
public function editNickname() {
$Model = M("user");
$state = $Model -> save(array('uid' => $_SESSION['uid'], 'nickname' => $_POST['nickname']));
if ($state) {
$_SESSION['nickname'] = $_POST['nickname'];
$this -> success('修改昵称成功!');
} else {
$this -> error('昵称修改失败');
}
//修改用户资料
public function edit() {
$this -> field = M('user') -> find(session("uid"));
$this -> display();
}
//编辑基本信息(个性签名,个性域名)
public function edit_message() {
$_POST['signature'] = mb_substr($_POST['signature'], 0, 50, 'utf-8');
//修改资料
if ($this -> _db -> where("uid=" . session('uid')) -> save()) {
$_SESSION['domain'] = $_POST['domain'];
$_SESSION['signature'] = $_POST['signature'];
$this -> _ajax(1, '修改成功!');
}
}


editNickname函数和edit_message函数$_POST变量没有经过过滤 直接传入..导致XSS
editNickname这个点可以XSS到后台和主页
edit_message函数可以X到个人中心
第四处:文章--评论
/hd/Hdcms/Member/Control/ProfileControl.class.php 45~107行

public function addComment() {
$Model = K('Comment');
$ModelCache= cache('model');
$mid = Q('mid',0,'intval');
$cid = Q('cid', 0, 'intval');
$aid = Q('aid', 0, 'intval');
if (!session("uid")) {
$this -> _ajax('nologin', '没有登录');
}
//-验证评论发表间隔时间
Q('session.comment_send_time', 0, 'intval');
//间隔时间小于配置项
if (!IN_ADMIN && Q('session.comment_send_time') + C('comment_step_time') > time()) {
$_time = Q('session.comment_send_time') + C('comment_step_time') - time();
$step = $_time / 60 > 1 ? intval($_time / 60) . '分钟' : $_time . '秒';
$this -> error('请' . $step . '后发表');
}
$content=Q('content');
if (!$content) {
$this -> error('评论内容不能为空');
}
$state = $Model -> where("cid={$cid} && aid={$aid} && " . C("DB_PREFIX") . "comment.uid=" . session('uid'))
-> where("content='$content'") -> order("comment_id DESC") -> find();
if ($state) {
$this -> error('请不要发表重复内容');
}
//添加积分
$reply_credits = intval(C('reply_credits'));
$credits_msg = '';
if ($reply_credits) {
$sql = "UPDATE " . C('DB_PREFIX') . 'user AS u SET credits=credits+' . $reply_credits;
M() -> exe($sql);
$_SESSION['credits'] += $reply_credits;
$credits_msg = '奖励' . $reply_credits . '个积分';
}
//添加
if ($comment_id = $Model -> addComment()) {
//记录发表时间
session('comment_send_time', time());
//修改文章评论数
M($ModelCache[$mid]['table_name']) -> inc('comment_num', 'aid=' . $aid);
$comment_state = M('role')->where('rid='.$_SESSION['rid'])->getField('comment_state');
if($comment_state == 1 || IN_ADMIN){
$comment = $this -> getCommentHtml($comment_id);
$msg = '评论成功!' . $credits_msg;
}else{
$comment='';
$msg = '评论成功,审核后显示';
}
//添加动态
$Message= mb_substr($content, 0, 30, 'utf-8');
$DyMessge = "<a target='_blank' href='".__WEB__."?a=Index&c=Index&m=content&mid={$mid}&cid={$cid}&aid={$aid}'>".$Message."</a>";
addDynamic($_SESSION['uid'],"发表了评论: " . $DyMessge);
//向文章作者发送系统消息
$article = M($ModelCache[$mid]['table_name'])->where("aid=$aid")->find();
$articleUrl = __WEB__."?a=Index&c=Index&m=content&mid={$mid}&cid={$cid}&aid={$aid}";
$title = mb_substr($article['title'], 0,30,'utf-8');
addSystemMessage($_SESSION['uid']," <a target='_blank' href='".$articleUrl."'>{$title}</a> 有了新评论");
$this -> _ajax(1,$msg, $comment);
} else {
$this -> error('失败了哟');
}
}


$content变量没有经过过滤导致XSS漏洞 这个点可以XSS到主页和后台

漏洞证明:

1.jpg


2.png


可以打到cookies

3.png


4.png

修复方案:

htmlspecialchars一下

版权声明:转载请注明来源 只发通用型@乌云


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝