白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

admin 2024年10月28日20:42:10评论27 views字数 1613阅读5分22秒阅读模式
漏洞影响:V1.5.0

源码下载:https://github.com/caiweiming/DolphinPHP/releases

环境搭建参考文章:https://segmentfault.com/a/1190000021779583

1、漏洞分析

漏洞点

application/common.php中的call_user_func函数

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

关于call_user_func函数是 PHP 中的一个函数,用于调用回调函数或方法。它允许你在运行时决定要调用哪个函数。

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

如果call_user_func函数中的参数可控,可导致RCE漏洞。

call_user_func($param[1], $log[$param[0]])
意思:`call_user_func` 调用一个函数,并使用 `$log` 变量的某个部分作为参数传递给该函数

继续对call_user_func(log[$param[0]])中的参数进行分析

分析参数$param

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

$param = explode('|'$value);
意思:将字符串 `$value` 使用竖线字符 `|` 作为分隔符拆分成一个数组,并将结果赋值给 `$param`。

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

查看$value

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

foreach ($match[1] as $value)
意思:遍历数组 $match[1] 中的每一个元素,并将当前元素的值赋给 $value 变量

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

查看$match[1]

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

 if(preg_match_all('/[(S+?)]/'$action_info['log'], $match))
意思:匹配 $action_info['log'] 中所有符合正则表达式 '/[(S+?)]/' 的子字符串,并将匹配结果存储在 $match 数组中。

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

$match[1]的值为不带方括号的字符串,其值从$action_info['log']中匹配

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

对应的模型为

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

$action_info = model('admin/action')->where('module'$module)->getByName($action)
意思:从数据表admin_action中过滤module 列等于 $module 的记录,通过 name 字段(或其他相关字段)来获取记录。

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

所以这里以module和name为条件进行查询admin_action表,在以$action_info['log']去匹配

关于call_user_func中调用函数$param[1]总结,只要保证log中有我们想要使用的回调函数,比如system

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

在系统--系统功能--行为管理中。log是可以修改的。即log值是可控的,则call_user_func的第一个参数可控。

分析参数param[0]]

查看$log

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

基于上述,查找可控的值,details

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

调用函数 action_log,且对details可控

查看$details

定位到application/user/admin/Role.php中,data['name']

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

查看$data['name']

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

details的值,就能对参数param[0]]的值可控

2、漏洞复现

1、登录使用admin/admin进行登录

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

2、针对call_user_func的第一个参数可控,即$param可控

在功能点 :系统--系统功能--行为管理中。编辑角色role_edit字段

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

在日志规则处进行编辑

[details|system] test ([details])

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

3、针对call_user_func的第二个参数可控,即param[0]]可控

在功能点在:用户->权限管理->角色管理。

编辑该角色,并使用burp抓包,将name参数的值修改为系统命令。

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

参考文章

https://xz.aliyun.com/t/14379

加下方wx,拉你一起进群学习

白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

原文始发于微信公众号(红队蓝军):白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月28日20:42:10
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现https://cn-sec.com/archives/3326037.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息