DolphinPHP_V1.5.0 RCE漏洞分析与复现
字数 1272
更新时间 2025-08-23 18:31:34

DolphinPHP V1.5.0 RCE漏洞分析与复现教学文档

0x00 漏洞概述

DolphinPHP(海豚PHP)是基于ThinkPHP5.1.41 LTS开发的开源PHP快速开发框架。在V1.5.0版本中存在一个远程代码执行(RCE)漏洞,该漏洞源于行为日志功能中的不安全回调函数调用,攻击者可通过精心构造的请求实现任意代码执行。

0x01 漏洞分析

漏洞位置

漏洞触发点位于application/common.php文件的1086行:

call_user_func($callback, ...$parameters);

漏洞原理

  1. 回调函数调用

    • call_user_func()函数用于调用回调函数,当参数可控时可导致代码执行
    • 示例:call_user_func('system', 'whoami'); 可执行系统命令
  2. 参数来源分析

    • 第一个参数$callback来自$param[1]
    • $param = explode('|', $value);$value|分割为数组
    • $value来自$match[1],通过正则`/

\[(\S+?) \]

/$action_info['log']`中提取方括号内的内容

  1. 数据库关联

    • $action_info来自admin_action表,查询条件为module=$modulename=$action
    • log字段存储行为日志规则,可通过后台修改
  2. 第二个参数来源

    • $log[$param[0]]$log数组中取值
    • $log数组包含用户可控的$details参数
    • $details通常来自POST请求中的name参数

关键代码流程

// 从行为日志中提取方括号内容
if(preg_match_all('/
$$
(\S+?)
$$
/', $action_info['log'], $match)){
    foreach($match[1] as $value){
        $param = explode('|', $value);
        $callback = $param[1];  // 第一个参数
        $parameter = $log[$param[0]];  // 第二个参数
        call_user_func($callback, $parameter);
    }
}

0x02 漏洞复现步骤

环境准备

  • DolphinPHP V1.5.0
  • 默认后台账号密码:admin/admin

复现过程

  1. 登录后台

    • 访问后台登录页面
    • 使用默认凭证admin/admin登录
  2. 修改行为日志规则

    • 导航至:系统->系统功能->行为管理
    • 搜索role_edit行为
    • 点击编辑,修改"日志规则"为:[details|system]
      • details:指定从$log数组中取值的键
      • system:将作为call_user_func的第一个参数
  3. 触发漏洞

    • 导航至:用户->权限管理->角色管理
    • 创建一个新角色(如未存在)
    • 编辑该角色,同时抓取请求数据包
    • 修改POST请求中的name参数值为要执行的系统命令,如:
      POST /admin/role/edit
      ...
      name=whoami
      
  4. 验证执行

    • 命令执行结果将显示在响应中或系统日志中

0x03 漏洞修复

官方在V1.5.1版本中修复了此漏洞,建议升级到最新版本。临时修复方案包括:

  1. 限制后台行为管理功能的访问权限
  2. $action_info['log']内容进行严格过滤
  3. 避免在日志规则中使用用户可控的敏感函数

0x04 技术总结

该漏洞的核心在于:

  1. 后台允许用户自定义日志规则中的回调函数
  2. 前台用户可控制回调函数的参数
  3. 未对回调函数和参数进行安全过滤

攻击链:

后台设置恶意日志规则 -> 前台触发行为日志记录 -> 执行任意代码

0x05 参考链接

相似文章
相似文章
 全屏