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

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

缺陷编号:wooyun-2014-051897

漏洞标题:ThinkSAAS SQL注入漏洞打包1-5

相关厂商:thinksaas.cn

漏洞作者: xfkxfk

提交时间:2014-02-24 16:36

修复时间:2014-05-25 16:36

公开时间:2014-05-25 16:36

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-02-24: 细节已通知厂商并且等待厂商处理中
2014-02-24: 厂商已经确认,细节仅向厂商公开
2014-02-27: 细节向第三方安全合作伙伴开放
2014-04-20: 细节向核心白帽子及相关领域专家公开
2014-04-30: 细节向普通白帽子公开
2014-05-10: 细节向实习白帽子公开
2014-05-25: 细节向公众公开

简要描述:

漏洞很多,一个一个提交太麻烦了,一起提交吧,希望能走个大厂商

详细说明:

第一处SQL注入
/app/group/action/do.php

//编辑小组基本信息
case "edit_base":

$groupname = t($_POST['groupname']);
$groupdesc = tsClean($_POST['groupdesc']);

if($groupname=='' || $groupdesc=='') tsNotice("小组名称和介绍都不能为空!");

//过滤内容开始
aac('system')->antiWord($groupname);
aac('system')->antiWord($groupdesc);
//过滤内容结束

$isgroupname = $new['group']->findCount('group',array(
'groupname'=>$groupname,
));

$groupid = intval($_POST['groupid']);

$strGroup = $new['group']->find('group',array(
'groupid'=>$groupid,
));

if($isgroupname > 0 && $strGroup['groupname']!=$groupname) tsNotice('小组名称已经存在!');


$new['group']->update('group',array(
'groupid'=>$groupid,
),array(
'groupname' => trim($_POST['groupname']),
'groupdesc' => trim($_POST['groupdesc']),
'joinway' => intval($_POST['joinway']),
'ispost' => intval($_POST['ispost']),
'isopen' => intval($_POST['isopen']),
'ispostaudit' => intval($_POST['ispostaudit']),
));

tsNotice('基本信息修改成功!');

break;


在编辑小组信息时,groupname和groupdesc都没有过滤直接进入update的row参数,导致SQL注入。
第二处SQL注入:
/app/group/action/do.php

//回复评论
case "recomment":

if($_POST['token'] != $_SESSION['token']) {
echo 1;exit;
}

$referid = intval($_POST['referid']);
$topicid = intval($_POST['topicid']);
$content = tsClean($_POST['content']);
$addtime = time();
$db->query("insert into ".dbprefix."group_topic_comment (`referid`,`topicid`,`userid`,`content`,`addtime`) values ('$referid','$topicid','$userid','$content','$addtime')");


回复评论处content没有过滤,导致insert行盲注。
证明如图,会延迟10s:

3.png


第三处SQL注入:
/app/group/action/topicedit.php

/编辑帖子执行        
case "do":

if($_POST['token'] != $_SESSION['token']) {
tsNotice('非法操作!');
}

$topicid = intval($_POST['topicid']);
$title = trim($_POST['title']);
$typeid = intval($_POST['typeid']);
$content = cleanJs($_POST['content']);

$iscomment = intval($_POST['iscomment']);
......
if($strTopic['userid']==$userid || $strGroup['userid']==$userid || $TS_USER['user']['isadmin']==1 || $strGroupUser['isadmin']==1){
$new['group']->update('group_topic',array(
'topicid'=>$topicid,
),array(
'typeid' => $typeid,
'title'=>$title,
'content'=>$content,
'iscomment' => $iscomment,
));


在编辑帖子是,title和content存在注入。
证明如图:

4.png


第四处SQL注入:
/app/photo/action/edit.php

case "do":

if($_POST['token'] != $_SESSION['token']) {
tsNotice('非法操作!');
}

$photoid = intval($_POST['photoid']);
$photoname = tsClean($_POST['photoname']);
$photodesc = tsClean($_POST['photodesc']);

$new['photo']->update('photo',array(
'photoid'=>$photoid,
),array(
'photoname'=>$photoname,
'photodesc'=>$photodesc,
));

header('Location: '.tsUrl('photo','show',array('id'=>$photoid)));

break;


修改单个图片信息时,photoname和photodesc没有过滤,导致SQL注入。
证明如图:

5.png


第五处SQL注入
/app/tag/action/add.php

case "do":

$objname = tsFilter($_POST['objname']);
$idname = tsFilter($_POST['idname']);
$objid = intval($_POST['objid']);
$tags = t($_POST['tags']);

$new['tag']->addTag($objname,$idname,$objid,$tags);

tsNotice('标签添加成功!');

break;


在函数addTag()中:

$tagIndexCount = $this->findCount('tag_'.$objname.'_index',array(
$idname=>$objid,
'tagid'=>$tagid,
));


idname通过tsFilter()函数过滤,然后做了key,但是tsFilter()函数可被制表符顺利绕过,而key没有过滤,导致SQL注入。
证明如图:

1.png


在日志中看到注入结果:

2.png

漏洞证明:

见详细说明

修复方案:

严格过滤,过滤完全点

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-02-24 16:46

厂商回复:

谢谢您的反馈,由于未修复完全导致漏洞存在。
我们会进一步修复,完善,见官方安装包,再次感谢!

最新状态:

暂无