ThinkPHP5.0.0~5.0.23RCE 漏洞分析及挖掘思路

前言

本节我将分析thinkphp5.0.x 版本的RCE漏洞,根据漏洞的研究模拟挖掘此漏洞的思路

本次分析框架下载,由于官方已经下架了相关的下载接口,这里我们用三方下载 一份v5.0.22版本的升级中...icon-default.png?t=N7T8https://www.codejie.net/5828.html

附赠 thinkphp5.0官方开发手册

架构总览 · ThinkPHP5.0完全开发手册 · 看云ThinkPHP V5.0是一个为API开发而设计的高性能框架——是一个颠覆和重构版本,采用全新的架构思想,引入了很多的PHP新特性,优化了核心,减少了依赖,实现了真正的惰性加载,支持composer,并针对API开发做了大量的优化。ThinkPHP5是一个全新的里程碑版本,包括路由、日志、异常、模型、数据库、模板引擎和验证等模块都已经重构,不适合原有3.2项目的升级,请慎重考虑商业项目升级,但绝对是新项目的首选(无论是WEB还是API开发),而且最好是忘记3.2版本的思维习惯,重新理解TP5。icon-default.png?t=N7T8https://www.kancloud.cn/manual/thinkphp5/122950

漏洞复现

这里先上payload 大家可以验证环境是否可行

 接下来我们就略过漏洞分析,模拟一下这个漏洞发现的思路

Request类中危险函数

在request类filterValue方法下有一个call_user_func()函数

如果传进去的两个参数$filter与$value都是可控的话,则会产生漏洞

函数调用链倒逆分析

接下来分析谁可以调用filtervalue方法

在requestl类中1026行,调用了此方法filtervalue,传入了相关值

 这段代码是位于994行input函数内,其中data 没有更改的,filter在1023行有本类的成员filter赋予

 那么我们继续分析谁可以调用input函数

仍然在requesr类中661行调用了此函数input,且传入input的data数组参数是本类的param赋予的

这段代码位于request类中的param方法中

 继续分析谁可以调用param函数,现在就不用这考虑传参的问题了,我只需request类的中param成员与filter成员为可控参数即可,且filter为数组包含一个system,param为这个数组包含命令语句为最佳。

让参数变得可控

在app类中exec方法中有调用调用request类的param

 需要注意的是这个框架的对象的创建模式是单例模式,也就是说469行instance得到的对象在前提request对象存在的情况下,得到的还是之前的request而非新的对象。

那么我们到底可不可以控制request对象的成员呢?看看名字-request!用户请求!似乎是可控的,不能说全不吧总有一两个属性是为用户准备的, 

现在继续分析函数调用链。要确保dispatch的type为merhod,我们才能正常调用param函数

谁调用了exec 函数,

在app类中77行run函数调用了exec函数

此外还有了两个意外的收获,1是我们找到了request对象2是我们发现了dispatch的赋值

函数调用链正向分析 

由此我们追入routecheck函数,一是寻找让dispatch对象的成员type值为method,二则是继续寻找让request对象的filter成员与param成员成为可控变量的契机。(不要乱 不要乱)

看到result不妨大胆的猜测,它最终就是这个函数执行的返回值

在643行,就有了result结果,而且联系了request对象

 追进route的check方法

在857看到了敏感参数method ,保证type为method跟它有没有关呢!再分析返回值

method会与rules有关,rules在87行会与返回值有关。

也没有找到type赋值的地方,我们大胆进入strtolower($request->method());,且这还还是调用request对象的方法,那更要分析了

(在下图 由注释信息当前的请求类型,猜测与type有关)

根据逻辑语句(我们都没有传参),它会进入524行

$_POST是什么参数!它一般都是用户输入的post数据,这是我们可控的。代码之后就把取出的值放在了method,看看它做了什么。它居然被调用了,而且传入的参数就是$_post,这是我们控制的,也就是说现在,我们可以任意调用request类的方法,且是参数还是我们可控的,

那这样的话,我用对象的方法去改对象的值岂不是轻轻松松!到request类中好好看看!

非常顺利 __construct就有成员属性赋值的机制。

我们可以将request对象的filter成员与param成员赋值了 ,(理论就是这样不过实际上你要调试的更多,因为要考虑到很多细节嘛)

至于type类型,这个我还真没分析出来,不过我们可以尝试调用接口方法,参看type类型这也不失为一种分析方法,像我调用/public/index.php的时候type就为module 调用/public/index.php?s=captcha就为method 这正是我们想要的

如果上述都可行,那我们构造好的参数,就可以RCE了, 谁调用app.run 完全不用管,一定会调用的

————————————————————————-----------——————————

总结

现在那么的RCE漏洞,那些大佬是怎么探索出来的,思路是什么,有没有0day大佬交个朋友!...我只能尽力追赶吧....

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

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

相关文章

资源调度-HPA:基于负载指标自动水平扩容缩容Pod

Pod 自动扩容:可以根据 CPU 使用率或自定义指标(metrics)自动对 Pod 进行扩/缩容。 控制管理器每隔30s(可以通过–horizontal-pod-autoscaler-sync-period修改)查询metrics的资源使用情况 支持三种metrics类型 预定义…

RabbitMQ交换机(1)

1.交换机Exchange RabbitMQ消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列。实际上,通常生产者甚至都不知道这些消息传递传递到了哪些队列中。 相反,生产者只能将消息发送到交换机(exchange),交换机工作的内容非常简单&am…

MySQL-多表联合查询

🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:重拾MySQL 🍹文章作者技术和水平很有限,如果文中出现错误&am…

Java面试基础|数据结构 -实时更新

1.HashMap和ConcurrentHashMap介绍 核心是一个Node数组,数据结构与hashMap相似 使用CAS操作来实现无锁的更新,提高了并发性。当更新节点时,它会使用CAS来替换节点的值或链接,如果CAS失败,表明有其他线程也在进行修改&a…

使用 Python 创造你自己的计算机游戏(游戏编程快速上手)第四版:第十九章到第二十一章

十九、碰撞检测 原文:inventwithpython.com/invent4thed/chapter19.html 译者:飞龙 协议:CC BY-NC-SA 4.0 碰撞检测涉及确定屏幕上的两个物体何时相互接触(即发生碰撞)。碰撞检测对于游戏非常有用。例如,如…

K8S之configMapsecret

job 第一个是初始化尝试,初始化尝试失败之后,会再重试两次。 配置资源管理: Secret Configmap*:1.2加入的新特征 1.18 Secret: 保存密码,token,敏感的k8s资源 这类数据可以存放在镜像当中,但是防止secret当中可以更方便的控…

QT第五天

使用QT绘图和绘图事件&#xff0c;完成仪表盘绘图&#xff0c;如下图&#xff1a; 程序运行结果&#xff1a; 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QPen> #include <QBrush&…

PromptCast-时间序列预测的好文推荐

前言 这是关于大语言模型和时间序列预测结合的好文推荐&#xff0c;发现这篇文章&#xff0c;不仅idea不错和代码开源维护的不错&#xff0c;论文也比较详细&#xff08;可能是顶刊而不是顶会&#xff0c;篇幅大&#xff0c;容易写清楚&#xff09;&#xff0c;并且关于它的Br…

2023 IoTDB Summit:天谋科技高级开发工程师谭新宇《优其效:如何用 IoTDB 监控工具进行深度系统调优》...

12 月 3 日&#xff0c;2023 IoTDB 用户大会在北京成功举行&#xff0c;收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题&#xff0c;多位学术泰斗、企业代表、开发者&#xff0c;深度分享了工业物联网时序数据库 IoTDB 的技术创新…

Kafka-生产者

Kafka在实际应用中&#xff0c;经常被用作高性能、可扩展的消息中间件。 Kafka自定义了一套网络协议&#xff0c;只要遵守这套协议的格式&#xff0c;就可以向Kafka发送消息&#xff0c;也可以从Kafka中拉取消息。 在实践生产过程中&#xff0c;一套API封装良好、灵活易用的客…

跟着cherno手搓游戏引擎【8】按键和鼠标的KeyCode

自定义KeyCode 先把glfw3.h里的KeyCode的定义抄到咱这里来。 在YOTO下创建KeyCode.h: #pragma once#ifdef YT_PLATFORM_WINDOWS///从glfw3中拿的 #define YT_KEY_SPACE 32 #define YT_KEY_APOSTROPHE 39 /* */ #define YT_KEY_COMMA 44…

迈向2024:医疗机器人的市场前景与技术革新

原创 | 文 BFT机器人 医疗机器人技术正以前所未有的速度在主流医学领域取得卓越进展&#xff0c;新应用、新技术不断涌现&#xff0c;使得该领域在过去一年中取得了令人惊叹的增长。然而&#xff0c;这仅仅是冰山一角&#xff0c;未来的发展空间仍然广阔无垠。 展望2024年&…

海外云手机:跨境养号的新趋势

近年来&#xff0c;市场综合数据显示&#xff0c;利用海外云手机进行跨境养号已经成为跨境电商发展的新潮流。特别是在社交电商营销和短视频引流领域&#xff0c;海外云手机不仅能够提高流量的质量&#xff0c;还能让商家实现业务翻倍增长。接下来&#xff0c;本文将简要阐述海…

软件测试|使用Python生成PDF文件

简介 PDF&#xff08;Portable Document Format&#xff09;是一种常用的文档格式&#xff0c;具有跨平台兼容性、保真性、安全性和交互性等特点。我们日常生活工作中的合同、报告、论文等通常都采用PDF格式&#xff0c;以确保文档在不同的操作系统&#xff08;例如 Windows、…

Leetcode刷题【每日n题】(2)

&#x1f95a;今日鸡汤&#x1f95a; 修仙之道&#xff0c;需有勇气和决心&#xff0c;方能战胜一切困难。 ——《斗破苍穹》 目录 1.题目一 2.思路分析 3.代码实现 4.题目二 5.思路分析 6.代码实现 1.题目一 16. 最接近的三数之和 给你一个长度为 n 的整数数组 nums 和 …

LabVIEW高效振动时效处理系统

概述&#xff1a;介绍了一个利用LabVIEW开发的振动时效处理系统&#xff0c;有效降低加工工件的内部残余应力&#xff0c;提升其质量和寿命。 项目背景 工业加工中的工件常存在残余应力问题&#xff0c;这直接影响工件的质量和寿命。虽然热时效和自然时效法被广泛应用于降低残余…

基于ssm的疫苗预约系统论文

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装疫苗预约系统软件来发挥其高效地信息处理的作用&#xff0c…

基于Python的货币识别技术实现

目录 介绍本文的目的和意义货币识别技术的应用场景货币识别的基本原理图像处理技术在货币识别中的应用特征提取方法:SIFT、HOG等支持向量机(SVM)分类器的使用实现过程数据集的收集和预处理特征提取和训练分类器参考文献介绍 本文的目的和意义 本文的目的是介绍如何利用Pyt…

LLMs之GLM-4:GLM-4的简介、安装和使用方法、案例应用之详细攻略

LLMs之GLM-4&#xff1a;GLM-4的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;2024年01月16日&#xff0c;智谱AI在「智谱AI技术开放日(Zhipu DevDay)」推出新一代基座大模型GLM-4。GLM-4 的主要亮点和能力如下:>> 性能与GPT-4相近&#xff1a;多模态、长文…

YOLOv5改进系列(26)——添加RFAConv注意力卷积(感受野注意力卷积运算)

【YOLOv5改进系列】前期回顾&#xff1a; YOLOv5改进系列&#xff08;0&#xff09;——重要性能指标与训练结果评价及分析 YOLOv5改进系列&#xff08;1&#xff09;——添加SE注意力机制 YOLOv5改进系列&#xff08;2&#xff09;——添加CBAM注意力机制 YOLOv5改进系列&…