在Ecshop后台渗透中,拿到管理员权限只是第一步,如何进一步获取webshell才是关键。这里整理了几种常见的思路,每种都有不同的适用场景和限制条件,供参考。
方法一:Flash播放器上传漏洞
这个方法由龙儿心提出,版本不限,基本通杀。进入后台 → 系统设置 → Flash播放器管理,可以看到上传功能,直接上传任意文件即可。
另外,后台的FCKeditor也有一个经典漏洞:[includes/fckeditor/editor/filemanager/connectors/php/config.php] 对Media类型没有限制,直接选择Type=Media上传webshell,访问路径为 https://target/images/upload/Media/xxx.php。
方法二:利用数据库备份 + Apache解析漏洞
另一种思路是利用后台的数据库备份功能。先在前台留个言,内容包含一句话木马。然后进后台,选择自定义备份,只备份存放留言的 ecs_feedback 表,这样备份文件会很小。


备份成功后,会发现文件被强制加上了 .sql 扩展名(比如备份名填的是 l4yn3.php,实际生成 l4yn3.php.sql)。

设计者本意是增加安全性,但忽略了Apache的解析漏洞:Apache会将 1.php.sql 这类文件当作PHP解析(因为 .sql 不在Apache可解析的扩展名列表中,Apache会向前匹配到 .php)。所以只要环境是Apache + PHP,直接访问备份后的链接即可执行一句话木马。
当然,这个方法的局限性也很明显:必须运行在Apache环境下,且GPC魔术引号不能开启,实际利用中比较鸡肋。
方法三:SQL查询功能直接导出
后台的“SQL查询”功能,原本是为管理员设计的,但真正懂SQL的管理员少之又少,反倒成了渗透测试人员的利器。

操作方式类似phpMyAdmin,直接执行SQL语句导出webshell。典型语句如下:
show databases;
use 数据库名;
create a(cmd text not null);
insert into a(cmd) values('');
select cmd from a into outfile '导出路径';
drop table if exists a;
很多人会问:不知道网站路径怎么办?这里有个小技巧:执行 use 数据库名; 这句时,虽然默认数据库就是当前网站的数据库,但这条语句会触发一个警告,而警告信息中通常会爆出网站的绝对路径。多次测试均有效。

但需要注意,into outfile 操作需要MySQL的root权限,否则无法导出。所以这种方法的前提是MySQL权限得够。
方法四:Smarty模板注入
这是比较直接的一招。进入后台后,找到模板管理相关功能,操作步骤如下:


插入一句话后,访问 https://www.***.com/myship.php 即可。原理是ECSHOP的Smarty模板机制允许直接执行PHP代码,从而产生漏洞。对Smarty不熟悉的同学可以自行研究,细节不展开。
补充一个实际案例:遇到Linux环境时,权限限制很严,直接写入模板文件可能无法执行,这时可以尝试把代码直接插入到页面中,反而能运行。

第五种方法
另外还有一种由oldjun提供的思路,条件更为苛刻,这里不再赘述,感兴趣可以自行搜索。
总结一下:方法一和方法四相对通用,限制较少;方法二和方法三各有特定的环境要求(Apache + GPC关闭、MySQL root权限)。实际测试时,建议优先尝试方法一和方法四,如果不行再考虑其他途径。
