Easy File Sharing Web Server 7.2 中存在基于 SEH 的缓冲区溢出,可通过密码恢复端点触发。
本仓库是我在教授漏洞研究与漏洞利用开发时所用教学材料的一部分,特别是用于介绍 SEH(结构化异常处理器)溢出和 ROP(返回导向编程)链概念时的材料。
它与我的演讲 "通往你第一个 CVE 的道路" 相关。在那次演讲中,我解释了漏洞研究有不同的切入点,而研究遗留软件中已公开记录的 CVE 是初学者最容易上手的路径之一。
之所以选择这个 CVE,是因为它展示了一个完整且真实的漏洞利用场景:
本仓库的目标是将此案例作为一块垫脚石,连接入门级缓冲区溢出练习与更高级的漏洞利用开发概念。
该漏洞影响 Easy File Sharing Web Server 7.2,这是一款广泛用于简单文件共享的轻量级 Windows Web 服务器应用程序。该软件在编写时并未考虑现代安全缓解措施。从教学角度来看,这一案例之所以特别有趣,在于其中多种因素的结合:
这种组合使 CVE-2025-34096 成为在真实未认证攻击场景中教授漏洞利用开发技术的绝佳案例。
Easy File Sharing Web Server 7.2 是一款轻量级 Windows 应用程序,专为通过 HTTP 共享文件而设计。除基本的文件浏览和用户账户功能外,它还包含一个密码恢复功能,即允许用户输入邮箱地址以接收遗忘凭据的表单。
该表单通过 POST 请求将数据提交到 /sendemail.ghp。处理 Email 字段的处理器会将该值直接复制到固定大小的栈缓冲区中,且不进行任何长度检查。该端点无需身份验证,因此远程攻击者与易受攻击的代码路径之间毫无阻隔。
关键技术细节:
作为其邮件通知功能的一部分,Easy File Sharing Web Server 会处理发往 /sendemail.ghp 的 HTTP POST 请求。该端点接受的 Email 参数会被复制到本地栈缓冲区中,且不进行任何长度检查。
易受攻击逻辑的简化版本如下:
char email_buffer[256];
strcpy(email_buffer, user_input);
由于目标缓冲区大小固定,且未对输入长度进行验证,在 Email 字段中发送足够长的字符串会导致复制操作越过缓冲区末尾继续写入。
随着写入的数据越来越多,栈布局遭到破坏。与简单的返回地址覆写不同,该溢出会触及存储在栈上的结构化异常处理器(SEH)链。当栈损坏触发异常时,操作系统会遍历 SEH 链,并将控制权转移到攻击者可控的处理器地址。
因此,利用流程遵循 SEH 覆写技术:
这使得该漏洞的利用比基本的 EIP 覆写更为复杂,但也更贴近真实世界的场景。
可以通过向 /sendemail.ghp 发送 POST 请求,并在 Email 参数中包含一个长字符串来复现崩溃。无需任何身份验证。以下是使用 Python 的示例:
import socket
HOST = '127.0.0.1'
PORT = 80
request = (
'POST /sendemail.ghp HTTP/1.1\r\n'
'Email=' + 'A' * 5000 + '&getPassword=Get+Password'
).encode('utf-8')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(request)
s.close()
在调试器下执行时,崩溃会显示被破坏的 SEH 链和访问冲突,从而确认用户可控数据已覆写异常处理器指针。
本仓库的目标不仅在于演示崩溃,更在于按照开发真实 SEH 漏洞利用时采用的方法论,一步一步走完整个漏洞利用过程。
为了使主 README 保持简洁,详细的利用说明、脚本和调试器步骤都放在本仓库的 Vulnerability 📂 文件夹中。
在那里,你将找到利用该 CVE 的完整工作流程,包括: