高质量的安全文章,安全offer面试经验分享
尽在 # 掌控安全EDU #
作者:掌控安全—杰斯
DolphinPHP
1.简介
DolphinPHP(海豚PHP)是一个基于ThinkPHP5.1.41LTS开发的一套开源PHP快速开发框架,DolphinPHP秉承极简、极速、极致的开发理念,为开发集成了基于数据-角色的权限管理机制,集成多种灵活快速构建工具,可方便快速扩展的模块、插件、钩子、数据包。
统一了模块、插件、钩子、数据包之间的版本和依赖关系,进一步降低了代码和数据的冗余,以方便开发者快速构建自己的应用。
官网地址下载:http://www.dolphinphp.com/
2.搭建
第一步:下载完成后,直接解压缩到服务器内
第二步:访问网站,勾选已阅读,并点下一步。
第三步:下拉网页,继续下一步。
第四步:输入好配置之后,再点下一步。
第五步:安装成功
3.代码分析
在源码,application文件夹下的common.php的action_log函数,有一处call_user_func
其中,参数可控分别为$param[1]和$log[$param[0]]
首先$param为$value以|为间隔分开的值
而$value实际上就是$match[1]的遍历
$match是通过正则匹配,$action_info[‘log’]得到,这个正则就是匹配中括号内的值,最终的$action_info是数据库查询得来。
在这个$action_info的查询中
对应的日志模型
对应的数据,可以发现,所以这里的查询操作就是通过module和name为条件查询dp_admin_action这一表,然后用log数据去正则匹配。
$action_info = model('admin/action')->where('module', $module)->getByName($action);
然而,这里的log内的值是可以控制的,也就表示call_user_func的第一个参数$param[1]可控
call_user_func的另外一个参数$log[$param[0]],需要从$log中寻找可控的value,这里目前可能可以控制的就是$model或$details。
在Attachment.php文件中的delete的函数中,存在有调用action_log并且$model或$details可控的地方。
可以发现,此处的$ids完全可控,但是有一处if判断。
可以看出,这里的判断应该就是删除附件的内容,所以这里只需要到时候删除附件就可以满足此条件。
这里的$ids对应call_user_func的第二个参数,假设传入calc,这个where(‘id’, ‘in’, $ids)->delete()会找不到文件删
所以每访问一次就需要删一个已存在的附件
经不断测试,这里可是使用数组的形式如$ids[]=calc%26&$ids[]=2这样,能正常找到id=2的图片,其中%26是&。经过
$ids = is_array($ids) ? implode(',', $ids) : $ids;
就变成了calc&,9
所以参数全部可控。
4.漏洞利用
在:系统->行为管理->删除附件->编辑处
将所属模块改为系统,并且将日志规则改为[details|system] test ([details])
这里我们可以点击删除按钮的时候,并且构造参数:ids[]=calc%26&ids[]=2
最终导致RCE成功利用。
申明:本公众号所分享内容仅用于技术讨论,切勿用于违法途径,任何非经授权的渗透都是违法行为。违者必究,后果需自行承担,与本公众号及作者无关
回顾往期内容
代理池工具撰写 | 只有无尽的跳转,没有封禁的IP!
扫码白嫖视频+工具+进群+靶场等资料
扫码白嫖!
还有免费的配套靶场、交流群哦
原文始发于微信公众号(掌控安全EDU):文库 | 以DolphinPHP为例的白盒审计分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论