
Estudio técnico de la vulnerabilidad CVE-2025-5548
本工作分析了 CVE-2025-5548 漏洞,该漏洞与 FreeFloat FTP Server v1.0 中的 栈缓冲区溢出 相关。实验室的主要目标是了解易受攻击的应用程序如何处理被篡改的输入,并在受控环境中观察验证缺陷如何最终影响程序的执行流程。
本仓库的开发不仅限于展示最终结果,而是记录了完整的研究过程:环境准备、工具选择、故障观察、内存分析以及漏洞真实影响的验证。
工作分为两个不同的部分。
本部分解释如何搭建实践环境,使用什么操作系统,哪个易受攻击的应用程序,以及认为分析所需哪些工具。
第二部分侧重于实践部分。这里描述检测故障、确认内存损坏、研究寄存器覆盖以及验证如何利用漏洞的过程。
实验在运行 Windows 11 Pro 25H2(Build 26200.6584) 的虚拟机上执行。选定的易受攻击软件是 FreeFloat FTP Server v1.0,这是一款老旧的应用程序,由于缺乏当前程序中常见的许多保护措施,因此适合此类练习。
虚拟机网络配置为 NAT 模式,允许访问互联网以安装依赖项、下载工具并保持实验室的基本连接。
为了覆盖分析的所有阶段,需要依赖多种工具。一些用于准备环境,其他用于审查二进制文件,还有用于观察故障发生时进程的行为。
用于下载仓库,维护某些资源的组织,并促进研究期间使用的材料管理。
用作支持以验证连接,识别暴露的服务,并检查目标是否在预期端口上正确响应。
安装以获取在 Windows 系统内进行底层调试和分析任务时有用的库、头文件和工具。
用于快速编辑、审查脚本以及简单操作字符串或测试数据。
作为编写脚本、测试自动化以及更有序地处理代码的舒适环境。
在需要审查较长脚本或调试与负载构建相关的逻辑时特别有用。
考虑了两种版本:
执行 Ghidra 是必要的,因为该工具是用 Java 开发的。
用于观察程序在执行期间的状态,检查寄存器,审查内存,并分析故障发生的精确点。
在静态分析阶段用于审查二进制文件并定位从安全角度看可疑的函数。
用作支持反编译并更好地理解易受攻击程序的内部逻辑。
该插件有助于创建模式、计算偏移量以及识别负载中的问题字符等任务。
实验室的主要组件是 FreeFloat FTP Server v1.0,它作为概念验证中的目标系统。其意义在于它包含经典的栈溢出漏洞,使其非常适合形成性分析。
尽管已经有为此类练习预先准备的虚拟机,但这次我们选择记录环境并证明所用工具的合理性。这有助于更好地理解为什么每个应用程序都是实验室的一部分,以及它们在分析中扮演什么角色。
第一步是检查 FTP 服务是否可访问并正常运行。确认连接后,使用静态分析工具审查二进制文件,以定位与字符串管理相关的潜在弱点。
在这次审查中,出现了像 strcpy 和 strcat 这样的不安全函数,进一步证实了该服务可能容易受到过长输入的怀疑。还检查了 FTP 协议的几个命令,这些命令可能接收用户控制的数据,并选择其中一个作为测试的主要候选。
有了这个基础,将进程加载到调试器中以观察其在执行期间的行为。
下一阶段是发送越来越长的字符串以检查程序是否停止正确响应。此过程允许验证,当达到一定大小时,服务会失败并最终导致内存更改。
这种行为证实了这不是一个简单的表面验证错误,而是一个影响进程流程的真实损坏。
触发故障后,需要精确计算需要多少字节才能到达返回地址。为此,使用非重复序列,以便崩溃时 EIP 中反映的值可以与发送输入中的确切位置相关联。
通过此过程,获得了覆盖控制寄存器所需的具体偏移量。
已知偏移量后,准备了一个新测试,其中返回地址被一个容易识别的值替换。目标是检查程序是否允许以受控方式修改 EIP。
测试是成功的,因为调试器显示寄存器包含输入的确切值。这表明可以改变执行流程并将其重定向到所选地址。
达到这一点后,分析了哪些字节可能干扰有效负载。在此类漏洞中,某些字符通常会导致截断、意外更改或字符串提前终止。
通过内存中的连续比较,识别出几个 坏字符,包括:
\x00\x0a\x0d检测它们对于构建最终稳定且与易受攻击程序行为兼容的负载很重要。
下一步是找到一个合适的地址,允许将执行重定向到负载将驻留的内存区域。此分析必须考虑操作系统和激活的保护,因为某些地址在执行间不稳定。
在实验室中,找到了一个有效的参考点,允许将流程覆盖与攻击者控制的输入链接起来。
流程控制验证后,构建了一个与先前发现限制兼容的 shellcode。此外,添加了一个前置区域的中性指令,以促进 CPU 即使目标位置有轻微偏差也能安全到达负载的开始。
这一步对于提高执行的可靠性很重要。
在最后阶段,将完整负载发送到易受攻击的服务,同时在攻击者机器上保持监听器处于监听状态。结果是建立了与目标系统的远程连接,确认该漏洞不仅允许导致程序崩溃,而且可以实现受控执行。
这证明了该缺陷的真实影响,并从进攻性和防御性安全角度证明了其相关性。
对 CVE-2025-5548 的研究清楚地展示了,一个没有现代保护机制的老旧应用程序如何容易受到基于内存损坏的经典利用技术攻击。
整个实验室涵盖了几个关键阶段:环境准备、故障的初始观察、溢出验证、执行寄存器控制、负载调试以及最终结果的验证。
除了技术测试之外,此案例有助于理解为什么使用不安全函数以及缺乏保护措施在遗留软件中仍然是一个重大风险。因此,这类练习对于巩固逆向工程、漏洞分析和受控环境中利用的知识特别有用。