首页 » 网站推广 » 海豚php手册技巧_web安然DolphinPHP RCE马脚分析

海豚php手册技巧_web安然DolphinPHP RCE马脚分析

访客 2024-11-23 0

扫一扫用手机浏览

文章目录 [+]

不雅观察到有一处call_user_func,向上回溯一下两个参数看是否可控

分别为$param[1]和$log[$param[0]]

海豚php手册技巧_web安然DolphinPHP RCE马脚分析

【→所有资源关注我,私信回答“资料”获取←】1、网络安全学习路线2、电子书本(白帽子)3、安全大厂内部视频4、100份src文档5、常见安全口试题6、ctf大赛经典题目解析7、全套工具包8、应急相应条记

海豚php手册技巧_web安然DolphinPHP RCE马脚分析
(图片来自网络侵删)

首先$param为$value以|为间隔分开的值,而$value实际上便是$match[1]的遍历,$match是通过正则匹配$action_info['log']得到,这个正则便是匹配中括号内的值,终极的$action_info是数据库查询得来,如下图

先看一下这个查询操作

对应的模型为

对应表的内容为

以是这里的查询操作便是通过module和name为条件查询dp_admin_action这一表,然后用log数据去正则匹配

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

而这里的log是可以自己修正的

也便是说现在可以掌握log内的值,也就表示call_user_func的第一个参数也可控

至于$log[$param[0]],须要从$log中探求可控的value,这里目前可能可以掌握的便是$model或$details

以是须要找调用action_log并且$model或$details可控的地方

这里找了Attachment.php#delete

可以看到$ids完备可控,但是有一处if判断

if (AttachmentModel::where('id', 'in', $ids)->delete())

操作肯定便是根据$ids删附件了,以是这里还须要随便上传一个附件让他删,随便传个头像就行了

这里的$ids对应call_user_func的第二个参数,假设传入calc,这个where('id', 'in', $ids)->delete()会找不到文件删,以是每访问一次就须要删一个已存在的附件

经由测试可以用数组的形式,如$ids[]=calc%26&$ids[]=9这样,能正常找到id=9的图片

然后经由

$ids = is_array($ids) ? implode(',', $ids) : $ids;

变成calc&,9

两个参数都可控

漏洞利用

系统->行为管理->删除附件->编辑

将所属模块改为系统

将日志规则改为[details|system] test ([details])

然后随便传一张图片看它的id,之前传的图片id是9,以是

由于这里默认$module是admin,以是上面要把所属模块改为系统

此时$match = 'details|system',$param[1]='system',$log[$param[0]]=$log['details']='calc&,9'

实行calc

末了

这里通过IDE的find usages该当还能找到其他触发action_log的地方,就不往下看了

标签:

相关文章

php常量率低技巧_PHP 常量详解教程

PHP 常量常量是单个值的标识符(名称)。在脚本中无法改变该值。有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号)。注释...

网站推广 2024-12-19 阅读1 评论0