CI在加载模板的时候,会调用 $this->load->view('template_name', $data);
内核中,查看view函数源码:
/system/core/Loader.php
且看这一段:
这个extract将导致变量覆盖漏洞。
$this->_ci_cached_vars是来自$_ci_vars,而$_ci_vars是来自用户传给view方法的第二个参数。(正常情况下是开发者传给模板的变量)
而我们看到extract后面:
include($_ci_path),$_ci_path是模板地址,因为之前的变量覆盖,将会导致任意文件包含漏洞,进而getshell。
所以,只要我们可以控制view的第二个参数的『键值』,传入 _ci_path=file:///etc/passwd ,在被extract后覆盖原来的模板地址,将可以包含/etc/passwd。
这个漏洞和 http://**.**.**.**/bugs/wooyun-2014-051906 有点类似,就是在assign(CI里叫$this->load->vars或是$this->load->view)的时候传入数组导致的。
如下Controller将可导致漏洞:
这个也类似:
当开启了远程文件包含的情况下,也可以直接包含php://input
评论