首先是环境复现
漏洞利用条件:usercenter=>true 漏洞文件:\application\index\controller\User.php 登陆会员中心,在个人资料页面中修改个人头像:
在该页面进行图像上传(上传文件为1.jpg) 修改图片内容,且不能修改掉jpg文件标识字节: 上传成功: 现在开始分析,是什么导致JPG文件被php解析了 _empty函数接收$name遍历,直接将$name返回视图中:return $this->view->fetch($name);
攻击者可通过上传文件,例如图片,传入$name,fetch模板进行php模板解析(将任意文件用php文件形式运行),导致getshell。
fetch()函数调用的是内置模板引擎的fetch方法, 这个方法实际上就是将要输出的页面内容赋值给一个变量,为了方便,thinkphp在对模板渲染的过程中,添加了php标签功能,使得其可以解析php代码。
在验证是否为模板文件,可以看到if (!is_file($template)) ,来判断是否存在,如果存在就将文件进行php解析。
|