OpenSNS V6.2.0漏洞分析

news/发布时间2024/5/19 0:00:29

前台RCE

原理分析

触发条件

这篇博客将详细解释前台RCE漏洞的原理。首先,让我们看一下触发这个漏洞的条件。

在 Application/Weibo/Controller/ShareController.class.php 中存在 shareBox 方法,它从GET请求中获取名为 query 的参数值,对其进行解码,然后将解码后的值和相应的关联数组传递给视图模板进行渲染。

image

接下来,我们观察模板是如何渲染的,位于 Application/Weibo/View/default/Widget/share/sharebox.html 中。它调用了 W 方法,进而调用了 fetchShare 方法,将 $parse_array 的值作为参数传递给这个方法。
image

再次转到 Thinkphp/common/function.php 中查看 W 方法,它接收 $name$data 两个参数,然后将这些参数传递给 R 方法。

image

继续查看 R 方法,它根据传入的 $url 参数来远程调用指定模块的控制器操作方法,并传递相应的参数。这个函数通过解析 $url 获取操作方法名称和模块名称,创建控制器对象,调用指定的操作方法,最后返回方法的执行结果。

image

进一步深入到 /Weibo/Widget/ShareWidget.class.php,查看了 fetchShare 方法,它使用 assignFetch 处理接收的参数,并在其中调用了 D 方法来处理 getInfo()。

image

再次回到 Thinkphp/common/function.php 中查看 D 方法,它用于实例化类。

image
最后,我们检查 getInfo() 方法,它接收一个 $param 参数,当 $param 包含 'app'、'model' 和 'method' 这三个键且不为空时,调用 D 方法来实例化类。

接下来,我们将根据实例化的条件来寻找只接收一个参数的Model类

image
接收一个$param参数,当$param包含'app'、'model'和'method'这三个键,且不为空时调用D方法实例化类

接下来就得根据实例化的条件去找只接收一个参数的Model类

触发方法

接下来了解触发这个漏洞的方法。

在 /ThinkPHP/Library/Think/Model.class.php 中存在一个 _validationFieldItem 方法,当传入的 $val 可控时,call_user_func_array 方法存在一个RCE漏洞。
image

call_user_func_array(callable $callback, array $args): mixed

这个函数将第一个参数作为回调函数 callback 调用,并将参数数组 args 作为回调函数的参数传递给它。

可以利用 /Application/Common/Model/ScheduleModel.class.php 中的 runSchedule 方法来触发漏洞。要满足触发条件,'status' 必须等于1
image

总结一下条件'status'必须等于1,传入的值必须包含'app'、'model'和'method'这三个键

漏洞复现

http://opensns.vul.cn/index.php?s=weibo/Share/shareBox
&query=app=Common%26
model=Schedule%26
method=runSchedule%26
id[status]=1%26
id[method]=Schedule->_validationFieldItem%26
id[4]=function%26
[2][]=%26
id[0]=cmd%26
id[1]=assert%26
id[args]=cmd=system("calc")

image

P.S.

opensns.vul.cn是本地测试地址,非外网
参考文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/01872786.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

读高性能MySQL(第4版)笔记10_查询性能优化(上)

查询优化1. 三管齐下 1.1. 不做、少做、快速地做 1.2. 如果查询太大,服务端会拒绝接收更多的数据并抛出相应错误 1.3. 如果查询写得很糟糕,即使库表结构再合理、索引再合适,也无法实现高性能 1.4. 查询优化、索引优化、库表结构优化需要齐头并进,一个不落 1.5. Percona Too…

DDR,总线,PCIE技术分析

DDR,总线,PCIE技术分析 PCIE开发笔记(一)简介篇这是一个系列笔记,将会陆续进行更新。最近接触到一个项目,需要使用PCIE协议,项目要求完成一个pcie板卡,最终可以通过电脑进行通信,完成电脑发送的指令。这当中需要完成硬件部分,使用FPGA板实现,同时需要编写Windows下的…

数字化采购:连接采购方和供应商的新时代

什么是数字化采购 数字化采购是一种新的企业采购模式,它通过数字化手段连接采购方和供应商,实现对不同类型物资采购的管理。与供应链管理(SCM)不同,数字化采购关注的是采购方和供应商之间的连接。数字化采购范畴界定数字化采购的狭义表现是供应商关系管理(SRM)软件,它能够管…

机器学习算法原理实现——lightgbm,核心leaf-wise生长结合数据和特征并行+直方图算法+单边梯度抽样+互斥特征捆绑

算法亮点: 1、leaf-wise生长策略+特征并行和数据并行 让我们通过一个简单的例子来详细解释 LightGBM 的 Leaf-wise 生长策略。假设我们有以下的数据集:| 年龄 | 收入 | 购买 || ---- | ---- | ---- || 20 | 3000 | 0 || 25 | 3500 | 0 || 30 | 4000 | 0 || 35 | 4500 | 1 ||…

WebStorm 2023:JavaScript开发者的终极利器

WebStorm是JetBrains公司开发的一款强大的JavaScript开发工具,为前端开发者提供了丰富的功能和智能,帮助他们提高开发效率、降低出错率并提高代码质量。 →→↓↓载RubyMine 2023 mac+win版代码提示与自动补全:WebStorm能够根据用户输入的内容,提供代码提示与自动补全功能,…

js循环方式、v-model、事件处理、表单控制、购物车案例

js循环方式 js循环 for(),基于索引的循环 let :es6语法,用于定义变量 const:用于定义常量 var以后尽量少用 、for循环写法一: for循环写法二: 列表循环 循环方式二:in循环 基于迭代的循环,依赖于索引取值 直接console.log是索引值,只有list[i]才是要取的值 循环方式…