ThinkPHP5变量覆盖导致的文件包含
简介
ThinkPHP
在加载模版解析变量时存在变量覆盖的问题,且没有对$cacheFile
进行相应的消毒处理,导致模板文件的路径可以被覆盖,从而导致任意文件包含漏洞的发生。
影响版本
5.0.0<=ThinkPHP5<=5.0.18
5.1.0<=ThinkPHP5<=5.1.10
缺陷代码
1 | public function index() |
实际上这种写法基本上遇不到,都是第一个参数是固定值,第二个参数为数据库取出的变量值
漏洞分析
传入的参数进入assign方法中
然后存入了$this->data
中
进入了View
的fetch
方法,调用模板引擎的fetch
继续跟进fetch方法
当缓存文件无效时时,会重新对模板进行编译,然后进入read方法
在read方法中进行变量覆盖,并将传入的文件进行包含,触发rce
漏洞复现
随便创建一个新文件
1 | phpinfo(); |
注意参数为cacheFile
end
仅作为漏洞整理