首页 > 编程语言 >【PHP代码审计】白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

【PHP代码审计】白盒审计超详细DolphinPHP_V1.5.0 RCE漏洞分析及复现

时间:2024-12-26 17:12:06浏览次数:3  
标签:审计 log DolphinPHP 白盒 param call user func action

漏洞影响:V1.5.0

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

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

1、漏洞分析

漏洞点

application/common.php中的call_user_func函数

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

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

call_user_func($param[1], $log[$param[0]])

意思:call_user_func 调用一个函数,并使用 $log 变量的某个部分作为参数传递给该函数

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

分析参数$param

$param = explode('|', $value);

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

查看$value

foreach ($match[1] as $value)

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

查看$match[1]

if(preg_match_all('/\[(\S+?)\]/', $action_info['log'], $match))

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

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

对应的模型为

$action_info = model('admin/action')->where('module', $module)->getByName($action)

意思:从数据表admin_action中过滤module 列等于 $module 的记录,通过 name 字段(或其他相关字段)来获取记录。

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

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

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

分析参数

查看$log

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

调用函数 action_log,且对model或details可控

查看$details

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

查看$data['name']

2、漏洞复现

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

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

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

在日志规则处进行编辑

[details|system] test ([details])

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

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

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

参考文章

https://xz.aliyun.com/t/14379
https://mp.weixin.qq.com/s/-wbnz7HvXrvZWDv480juQQ

原创 LULU 红队蓝军

标签:审计,log,DolphinPHP,白盒,param,call,user,func,action
From: https://www.cnblogs.com/o-O-oO/p/18533708

相关文章

  • 【JAVA代码审计】JspxCMS_9.0.0
    一、项目详细1.1项目介绍1.2使用技术二、环境搭建2.1IDEA搭建2.2Tmocat搭建三、漏洞挖掘3.1SSRF3.1.1第一处3.1.2第二处3.2不安全的反射3.3文件操作类3.3.1文件写入3.3.2文件上传3.3......
  • 白盒测试——6种覆盖(语句覆盖,判定覆盖,条件覆盖,判定条件覆盖,组合覆盖,路径覆盖)
    目录白盒测试1.语句覆盖:每个语句执行一次2.判定覆盖:每个判定真假至少一次3.条件覆盖:每个判定中的条件至少一次4.判定条件覆盖=2+35.组合(条件组合覆盖):每个判定中的各个条件各种可能的组合至少一次6.路径覆盖:所有路径至少执行一次此文章为我看了B站视频和CSDN文章......
  • 使用frida分析白盒aes,DFA攻击
    这次分析的app是:五菱汽车(8.2.1)登录,抓包发现请求体只有sd字段,看见加密的时候,可以先使用算法助手hookjava层所有加解密方法发现我们所需要的sd加密字段在java层hook不到,那加密算法应该是写在了so层,因为这个app是bb加固企业,得有脱壳机才能脱。jadx加载dex,直接搜"sd"发现这......
  • 数据库审计与监控
    title:数据库审计与监控date:2024/12/20updated:2024/12/20author:cmdragonexcerpt:数据库审计与监控是确保数据库安全性和性能的关键环节。通过实施有效的审计策略,可以追踪用户活动,监控数据访问与修改,从而及时发现潜在的安全威胁和性能瓶颈。探讨数据库审计的基本概念......
  • 网安人必备的知识库/漏洞库/代码审计/SRC漏洞挖掘/攻防演练/应急响应免杀等
       渗透测试0day漏洞库-威胁情报库-每日更新1day0day漏洞通知0x01简介         星球拥有1day/0day漏洞文库(每周一至周五更新1day/0day漏洞),2024漏洞文库已更新POC3500+(累计收集12w+的POC),如果你想学习更多渗透挖洞技术/技巧欢迎加入我们内部星球可获得内部工具字......
  • 白盒测试也称为结构测试、透明盒测试、逻辑驱动测试或基于代码的测试
    白盒测试概述白盒测试也称为结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。它是一种测试用例设计方法,测试人员可以访问程序的内部结构,如代码和逻辑流程。在Java程序中,这意味着能够查看类、方法、控制结构(如条件语句和循环)等内容。主要目的是通过检查程序的内部逻辑结......
  • 灰盒测试是一种软件测试方法,它介于黑盒测试和白盒测试之间。
    一、概念黑盒测试是把软件看作一个不透明的黑盒子,只关注软件的输入和输出,而不关心内部的逻辑结构。白盒测试则相反,测试人员可以看到软件内部的代码逻辑结构,根据程序内部的逻辑来设计测试用例。灰盒测试结合了两者的特点,测试人员对软件内部的部分实现细节有所了解,但并不需要像白......
  • 什么是网络安全审计?
    定义网络安全审计是一种系统的、独立的检查和评估活动,用于审查和验证网络系统的安全性、合规性以及对安全策略和程序的遵循情况。它通过收集、分析和评估网络活动相关的数据,包括用户行为、系统配置、网络流量等,来确定网络环境是否存在安全风险、是否符合法律法规和企业内部的......
  • 代码审计之Fastjson
    写一个demopackagecn.anger.fastjsontest.demos.web;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;publicclassFastjsonController{publicstaticvoidmain(String[]args){//利用Fastjson去解析变量数据......
  • auditd-Linux操作系统审计工具简介
    1.auditd概述auditd是Linux审计系统的用户空间组件,负责将审计记录写入磁盘。它可以帮助运维人员审计Linux系统,分析发生在系统中的事件。Linux内核具有记录事件的能力,包括系统调用和文件访问,auditd则负责将这些日志记录下来,以供管理员检查是否存在安全漏洞。2.安装auditd......