ECShop全系列版本代码执行高危漏洞分析
漏洞概述
ECShop的user.php文件中的display函数的模版变量可控,导致注入,配合注入可达到远程代码执行。攻击者无需登录站点等操作,可以直接远程写入webshell,危害严重。
漏洞评级
严重
影响范围
ECShop全系列版本,包括2.x,3.0.x,3.6.x等。
漏洞分析
0x01. SQL注入
先看 ecshop/user.php:302
$back_act 变量来源于 HTTP_REFERER ,可控。
Ecshop 使用了 php 模版引擎 smarty ,该引擎有两个基本的函数assign()、display()。assign()函数用于在模版执行时为模版变量赋值,display()函数用于显示模版。smarty运行时,会读取模版文件,将模版文件中的占位符替换成assign()函数传递过来的参数值,并输出一个编译处理后的php文件,交由服务器运行。
在:ecshop/includes/init.php:169文件中创建了Smarty对象cls_template来处理模版文件,对应的文件是includes/cla_template.php,
我们再看 assign函数:ecshop/includes/cls_template.php:70
assign函数用于在模版变量里赋值。
display 函数:ecshop/includes/cls_template.php:100
从函数来看,首先会调用 $this->fetch 来处理user_passport.dwt 模板文件,fetch() 函数中会调用 $this->make_compiled 来编译模板。 make_compiled 会将模板中的变量解析,也就是在这个时候将上面 assign 中注册到的变量 $back_act 传递进去了,解析完变量之后返回到 display 函数中。此时 $out 是解析变量后的html内容,判断 $this->_echash 是否在 $out 中,若在,使用 $this->_echash 来分割内容,得到 $k 然后交给 insert_mod 处理。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
66源码网 » ECShop全系列版本代码执行高危漏洞分析