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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2007-1567 — War FTP Daemon 1.65 中的经典基于堆栈的缓冲区溢出,演示了通过畸形 FTP 命令实现的传统远程代码执行。 | Kitploit
工具/GitHubGitHub/themalwareguardian/cve-2007-1567
漏洞分析漏洞利用Shellcode学习与教育远程访问工具二进制利用
GitHubthemalwareguardian/cve-2007-1567

CVE-2007-1567

War FTP Daemon 1.65 中的经典基于堆栈的缓冲区溢出,演示了通过畸形 FTP 命令实现的传统远程代码执行。

查看仓库
14个月前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

🐞 CVE-2007-1567: War FTP Daemon 1.65 - 基于栈的缓冲区溢出

经典的基于栈的缓冲区溢出漏洞,存在于 War FTP Daemon 1.65 中,通过畸形的 FTP 命令演示了老式的远程代码执行技术。




📑 目录

  • 为何存在此仓库
  • 此漏洞为何有趣
  • 背景与受影响软件
  • 关于漏洞
  • 触发崩溃
  • 利用方法



🎓 为何存在此仓库

此仓库是我在讲授内存损坏利用时所使用材料的一部分(除了我的日常工作外,我还在不同的网络安全课程中授课,帮助培养下一代的逆向工程师)。

CVE-2007-1567 是我在介绍完基本的 EIP 覆盖基础知识后立即使用的案例。其利用过程清晰直接,但有一个细节使其比典型的入门练习稍有趣味:FTP 协议引入了一个额外的坏字符,学生在构建 shellcode 时必须识别并处理它。这是一个小约束,但足以让学生思考,而不仅仅是照搬他们已经使用过的技术。




💡 此漏洞为何有趣

War FTP Daemon 1.65 是 20 世纪 90 年代末期的遗留 Windows FTP 服务器。该漏洞位于 USER 命令处理程序中,它使用 sprintf 将用户控制的输入复制到一个固定大小的栈缓冲区中,而未验证其长度。该案例在教学中的价值如下:

  • 无需认证。 溢出发生在 USER 命令处理程序中,远在检查密码之前。只需一条命令即可触发崩溃。
  • 直接覆盖 EIP。 无需 SEH、堆或多阶段利用。保存的返回地址被直接覆盖。
  • 额外的坏字符。 除了常见的 \x00、\x0a 和 \x0d 之外,FTP 协议引入了 \x40 (@) 作为坏字符,因为它会解释 user@host 语法。学生必须在坏字符分析过程中识别这一点。
  • 需要较旧的 Windows 环境。 与我用于教学的大多数遗留软件不同,由于 Winsock API 的更改,War FTP Daemon 1.65 无法在现代 Windows 上运行。它需要 Windows XP,这增加了实际设置的挑战,并教会学生实验环境的重要性。



🔍 背景与受影响软件

War FTP Daemon 是一个 Windows FTP 服务器,最初编写于 20 世纪 90 年代末。它在 TCP 端口 21 上监听并处理标准 FTP 命令。该漏洞位于 USER 命令处理程序中,它使用 sprintf 处理连接客户端发送的用户名而未验证长度。

关键技术细节:

  • 漏洞类型:基于栈的缓冲区溢出
  • 受影响版本:War FTP Daemon 1.65
  • 受影响端点:FTP USER 命令
  • 易受攻击组件:USER 命令处理程序
  • 是否需要认证:否
  • 影响:远程代码执行



⚠️ 关于漏洞

War FTP Daemon 通过将提供的用户名传递给 sprintf 来处理 USER 命令,sprintf 将其复制到一个固定大小的栈缓冲区中而不检查其长度。简化版的漏洞逻辑如下所示:

root@kitploit:~
char buffer[256];

sprintf(buffer, "%sCRLF", username);

发送一个足够长的字符串作为 USER 参数会导致复制操作超出缓冲区末尾,破坏栈直到保存的返回地址被覆盖。当函数返回时,CPU 从栈中加载攻击者控制的值到 EIP 并跳转到该地址。




💥 触发崩溃

可以通过在 FTP 上发送一个超长的 USER 参数来复现崩溃。无需认证。使用 Python 的示例如下:

root@kitploit:~
import socket

HOST = '127.0.0.1'
PORT = 21

payload = b"A" * 700

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.recv(1024)

s.send(b"USER " + payload + b"\r\n")
s.close()
下载工具

在调试器下执行时,崩溃显示 EIP 被用户控制的数据覆盖:

root@kitploit:~
EIP = 41414141

确认保存的返回地址已被溢出破坏。




💣 利用方法

此仓库的目的不仅在于演示崩溃,还在于逐步引导完成完整的利用过程,从模糊测试到可工作的反向 shell。

为了保持主 README 的整洁,详细的利用笔记、脚本和调试器步骤放置在此仓库的 Vulnerability 📂 文件夹中。

您将在其中找到用于利用此 CVE 的完整工作流程,包括:

  • 对 USER 命令进行模糊测试以识别崩溃。
  • 偏移发现以定位 EIP 在栈上的确切位置。
  • 坏字符分析,包括特定于 FTP USER 处理的 \x40 字符。
  • 在 MFC42.dll 中定位 JMP ESP 小工具。
  • Shellcode 放置与执行。