# 在D:\phpStudy\WWW\xercms\XerCMS\Services\admin\forms.php中的updateTemplate()函数 ``` function updateTemplate() { $sname = g('sname');$data = stripslashes(p('content')); file_put_contents(INC.'Data/forms/template/'.$sname.'.htm',$data); $this->tips('finish',dreferer()); } ``` 可以看到 ``` file_put_contents(INC.'Data/forms/template/'.$sname.'.htm',$data); ``` 写入的文件名`$sname`可控,写入的内容 `$data` 只是stripslashes,也可控,但是后缀名是html,我们先写代码进html文件,下面的利用点就是包含了该html文件,导致可以getshell  利用点在D:\phpStudy\WWW\xercms\XerCMS\Services\admin\member.php中的editmember函数 ``` function editmember() { $id = int1(g('id'));$model = g('model','personal'); $member = memberdata($id);$member = array_merge($member,i('m.member')->getProperty($id,$model)); include_once($this->tpl('header.htm')); include_once($this->tpl('../../../Data/member/model/template/'.$model.'.htm')); } ``` 可以看到这里 ```...
# 在D:\phpStudy\WWW\xercms\XerCMS\Services\admin\forms.php中的updateTemplate()函数 ``` function updateTemplate() { $sname = g('sname');$data = stripslashes(p('content')); file_put_contents(INC.'Data/forms/template/'.$sname.'.htm',$data); $this->tips('finish',dreferer()); } ``` 可以看到 ``` file_put_contents(INC.'Data/forms/template/'.$sname.'.htm',$data); ``` 写入的文件名`$sname`可控,写入的内容 `$data` 只是stripslashes,也可控,但是后缀名是html,我们先写代码进html文件,下面的利用点就是包含了该html文件,导致可以getshell  利用点在D:\phpStudy\WWW\xercms\XerCMS\Services\admin\member.php中的editmember函数 ``` function editmember() { $id = int1(g('id'));$model = g('model','personal'); $member = memberdata($id);$member = array_merge($member,i('m.member')->getProperty($id,$model)); include_once($this->tpl('header.htm')); include_once($this->tpl('../../../Data/member/model/template/'.$model.'.htm')); } ``` 可以看到这里 ``` include_once($this->tpl('../../../Data/member/model/template/'.$model.'.htm')); ``` $model变量可控,完全可以包含我们之前构造的html文件,导致getshell  第二种getshel方法就简单了,后台可以任意执行SQL语句,完全没有被阉割,这不讲道理啊  菜刀连接即可