CryptoMachio/CVE-2025-5548

GitHub: CryptoMachio/CVE-2025-5548

该项目详细分析了CVE-2025-5548漏洞,通过搭建实验环境演示了如何利用FreeFloat FTP Server v1.0中的栈缓冲区溢出漏洞实现远程代码执行。

Stars: 0 | Forks: 0

# 漏洞 CVE-2025-5548 的技术分析 ## 简介 本文分析了 **CVE-2025-5548** 漏洞,该漏洞与 **FreeFloat FTP Server v1.0** 中的一个**栈缓冲区溢出**有关。本次实验的主要目的是了解一个存在漏洞的应用程序如何响应被操纵的输入,并在受控环境中观察验证失败如何最终影响程序的执行流程。 本仓库的开发不仅限于展示最终结果,而是涵盖了完整的调查研究过程:环境准备、工具选择、故障观察、内存分析以及验证漏洞的实际影响。 ## 内容组织 本文档分为两个不同的部分。 ### 实验室准备 本节介绍了如何搭建练习环境,使用了什么操作系统,目标应用程序是什么,以及进行此次分析认为必要的工具有哪些。 ### 分析过程 第二部分侧重于实践。此处描述了用于检测故障、确认内存损坏、研究寄存器覆盖以及验证如何利用漏洞的过程。 # 1. 使用的实验室环境 ## 使用的系统 本次练习是在一台安装了 **Windows 11 Pro 25H2 (Build 26200.6584)** 的虚拟机上完成的。选择的易受攻击软件是 **FreeFloat FTP Server v1.0**,这是一个适合此类练习的旧版应用程序,因为它缺乏现代程序中常见的许多保护机制。 虚拟机的网络配置为 **NAT** 模式,这允许访问互联网以安装依赖项、下载工具并保持实验室的基本连接。 ## 主要工具 为了覆盖分析的所有阶段,必须依赖多种工具。有些用于准备环境,有些用于审查二进制文件,还有些用于观察发生故障时进程的行为。 ### 基本工具 #### Git 用于下载仓库,组织特定资源,并简化调查过程中所用材料的管理。 #### Nmap 用作辅助手段,以验证连接性、识别暴露的服务并检查目标是否在预期端口上正常响应。 #### Windows SDK 安装它是为了提供在 Windows 系统内进行底层调试和分析任务时有用的库、头文件和工具。 ### 编辑器和开发环境 #### Notepad++ 用于快速编辑、审查脚本以及对测试字符串或数据进行简单的处理。 #### Visual Studio Code 作为一个舒适的环境,用于编写脚本、测试自动化并以更有序的方式处理代码。 #### PyCharm Community 当需要审查较长的脚本或调试与构建 payload 相关的逻辑时,这特别有用。 ### 必要的依赖项 #### Python 考虑了两个版本: - **Python 3**,作为现代脚本编写和自动化的首选。 - **Python 2.7**,为了兼容此类实验室中使用的一些经典调试工具。 #### Java JDK 运行 **Ghidra** 必须使用它,因为该工具是基于 Java 开发的。 ### 分析和逆向工程工具 #### Immunity Debugger 用于在程序执行期间观察其状态、检查寄存器、审查内存并分析发生故障的确切位置。 #### IDA Free 用于静态分析阶段,以审查二进制文件并从安全角度定位可疑的函数。 #### Ghidra 用作辅助,以反编译并更好地理解易受攻击程序的内部逻辑。 #### Mona 该插件简化了诸如创建模式、计算偏移量 以及识别 payload 中问题字符等任务。 ## 易受攻击的应用程序 实验室的主要组件是 **FreeFloat FTP Server v1.0**,它在概念验证中充当目标系统。它的价值在于包含了一个经典的栈溢出漏洞,使其成为非常合适的教学案例。 ## 总体观察 虽然存在为此类练习准备好的虚拟机,但在本案中,选择记录环境并证明所使用的工具的合理性。这有助于更好地理解为什么每个应用程序都是实验室的一部分,以及它在分析过程中扮演什么角色。 # 2. 漏洞分析 ## 初始侦察 第一步是检查 FTP 服务是否可访问并正常工作。一旦确认了连接性,就通过静态分析工具审查二进制文件,以查找与字符串管理相关的潜在弱点。 在此审查期间,出现了诸如 `strcpy` 和 `strcat` 之类的函数,这加强了该服务可能对过长的输入感到脆弱的怀疑。还检查了 FTP 协议中多个可能接收用户控制数据的命令,并选择其中一个作为测试的主要候选对象。 在此基础上,将进程加载到调试器中以观察其运行期间的行为。 ## 通过递增输入进行测试 下一阶段是发送越来越长的字符串,以检查程序是否停止正常响应。该过程验证了超过一定大小后,服务会失败并最终导致内存更改。 这种行为证实了这不仅仅是表面上的验证错误,而是影响进程流程的实际内存损坏。 ## 精确定位覆盖点 触发故障后,必须精确计算到达返回地址需要多少字节。为此,使用了一个不重复的序列,以便崩溃时反映在 **EIP** 中的值可以与发送输入中的确切位置相关联。 多亏了这个过程,获得了覆盖控制寄存器所需的具体偏移量。 ## 验证执行控制 知道了偏移量后,准备了一个新的测试,其中返回地址被替换为一个易于识别的值。目的是检查程序是否允许以受控方式修改 **EIP**。 测试是成功的,因为调试器显示寄存器完全包含了输入的值。这证明可以改变执行流程并将其重定向到选定的地址。 ## 审查问题字符 达到这一点后,分析了哪些字节可能会干扰 payload。在此类漏洞中,某些字符通常会导致截断、意外更改或字符串过早结束。 通过内存中的连续比较,识别出了几个 **bad characters**(坏字符),其中包括: - `\x00` - `\x0a` - `\x0d` 检测到它们对于构建与易受攻击程序的行为兼容且稳定的最终 payload 很重要。 ## 在内存中寻找有用的引用 下一步是找到一个合适的地址,允许将执行重定向到将驻留 payload 的内存区域。此分析必须考虑操作系统和活动的保护措施,因为某些地址在执行之间不稳定。 在实验室中,定位了一个有效的引用,允许将流覆盖与攻击者控制的输入链接起来。 ## 准备 Payload 在验证了流程控制后,构建了一个与先前发现的限制兼容的 shellcode。此外,添加了一个前置的中性指令区域,以便即使在与预期位置存在轻微偏差的情况下,CPU 也能安全地到达 payload 的开头。 这一步对于提高执行的可靠性很重要。 ## 最终执行和影响验证 在最后阶段,向易受攻击的服务启动了完整的 payload,同时在攻击机器上保持 listener 处于监听状态。结果是与目标系统建立了远程连接,这证实了该漏洞不仅允许导致程序崩溃,还可以获得受控的执行。 这证明了故障的实际影响,并证明了其在进攻性和防御性安全方面的相关性。 # 结论 对 **CVE-2025-5548** 的研究清楚地表明,一个没有现代保护机制的旧版应用程序是如何容易受到基于内存损坏的经典利用技术影响的。 在实验室中,我们经历了几个基本阶段:环境准备、故障的初步观察、溢出验证、执行寄存器控制、payload 调试和最终结果验证。 除了技术验证之外,这个案例还有助于理解为什么使用不安全函数和缺乏保护措施仍然是遗留软件中的重大风险。因此,此类练习对于在受控环境中巩固逆向工程、漏洞分析和利用方面的知识特别有用。
标签:CTI, CVE-2025-5548, EXP开发, FreeFloat FTP Server, Go语言工具, Web报告查看器, Windows, Windows 11, 二进制安全, 云资产清单, 内存破坏, 栈溢出, 漏洞分析, 漏洞复现, 缓冲区溢出, 网络安全, 调试技术, 路径探测, 逆向工具, 逆向工程, 隐私保护