12/16
本文字数2704
来和我一起阅读吧
前言
最近在某论坛上看到一篇分析74cms存在模板解析漏洞的文章,74cms使用了tp3的框架,然后自己对tp框架的模板解析渲染也不是很熟,就想着学习一下这个漏洞,顺便熟悉一下tp3的模板解析。说干就干,先挑一个软一点的74cms捏一下,cms版本:v6.0.20。
漏洞分析
对一个已知漏洞进行分析比较喜欢采用溯源的方式进行,首先已知漏洞点的位置:
/Application/Common/Controller/BaseController.class.php,
触发方法:assign_resume_tpl。
在第175行调用了fetch方法,而在tp3框架内,所有的控制器都是继承自父类:/ThinkPHP/Library/Think/Controller.class.php,所以我们直接跟进到父类当中,来查看这个fetch方法到底发生了什么。这里要注意一下,传递的变量$tpl是要被解析的模板路径。
来到父类当中,可以看到这个fetch方法是来自于构造方法中实例化的view对象。
view视图类的位置在:
/ThinkPHP/Library/Think/View.class.php。
所以还是继续跟进到视图类当中,这里还是要注意参数的传递,在第84行中可以看到,调用fetch函数时传递三个参数,参数$templateFile是之前传递的被解析模板的路径,$content和$prefix两个参数都为空。接着来看视图类当中的fetch函数,先上代码。