ECShop 2.x 3.0代码执行漏洞分析
作者:CQITer小编 时间:2018-09-06 21:28
ECShop是一款B2C独立网店系统,适合企业及个人快速构建个性化网上商店。2.x版本跟3.0版本存在代码执行漏洞。
0×01 漏洞原理ECShop 没有对 $GLOBAL[‘_SERVER’][‘HTTP_REFERER’] 变量进行验证,导致用户可以将任意代码插入的user_passport.dwt模板中,随后insert_mod根据模板内容动态执行相应的函数,用户插入恶意代码导致模板动态执行了lib_insert下的 insert_ads 方法,通过SQL注入,返回构造的执行代码,致使后面调用cls_template模板类的fetch函数,成功执行恶意代码。
0×02 环境搭建IDE : PHPStorm
PHP: 5.4
ECshop 3.0
ECShop 2.7.3
0×03 分析过程 整体功能首先过一下整体的功能,进入到user.php中。


正常情况下,程序会将$GLOBALS[‘_SERVER’][‘HTTP_REFERER’] 赋值给了$back_act,接着通过cls_template模板类的assign和display进行赋值和和传值给了user_passport.dwt页面模板;这时候user_passport.dwt页面模板的内容是这样子的。


进入到$smarty->display中,通过inser_mod的分割和反序列之后动态调用函数获得购物信息和会员信息,将会默认执行user_passport.dw上面的两个函数,即lib_insert函数类下的insert_cart_info和insert_member_info函数。
insert_cart_info函数//调用购物信息 insert_member_info函数 //调用会员信息user_passport.dw模板:


inser_mod函数:


在user.php 中的通过执行登陆操作的时候,将$GLOBALS[‘_SERVER’][‘HTTP_REFERER’]的值修改为我们的代码:


这时候$back_act的值就是我们篡改之后的REFERER值了,之后程序会继续执行:
$smarty->assign('back_act', $back_act); //赋值 $smarty->display('user_passport.dwt'); //传值到模板上经过assign,display的赋值和传值之后,这时候user_passport.dwt模板上的back_act值是这样的:







