Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
proftpd-rewrite-utf8trans — ProFTPD 1.3.9d - 高危 - 远程 - 崩溃 - RewriteMap int:utf8trans BSS 溢出 | Kitploit
工具/GitHubGitHub/abraxas/proftpd-rewrite-utf8trans
漏洞分析漏洞利用模糊测试网络安全渗透测试二进制分析实验室与实践
GitHubabraxas/proftpd-rewrite-utf8trans

proftpd-rewrite-utf8trans

ProFTPD 1.3.9d - 高危 - 远程 - 崩溃 - RewriteMap int:utf8trans BSS 溢出

查看仓库
3天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - proftpd-rewrite-utf8trans

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  proftpd-rewrite-utf8trans

proftpd-rewrite-utf8trans

类别: 崩溃 可达性: 远程

ProFTPD 1.3.9d (f59f248) - ProFTPD (proftpd.org)

contrib 模块 mod_rewrite 自带 RewriteMap int:utf8trans。该内置映射将客户端 FTP 参数(最多 CommandBufferSize,512 KiB)复制到两个 1024 槽位的 BSS 缓冲区中,且没有目标容量限制。一个较长的 ASCII STOR 文件名会触发 ASan global-buffer-overflow,写入大小为 8。会话子进程中止。守护进程保持运行。类别为崩溃。并非 RCE。

ID暂无 CVE
类别崩溃
可达性远程(FTP 参数被送入 int:utf8trans)
CWECWE-120
CVSS高危:7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H,前提是 RewriteRule 为预认证。实验中使用的是登录后的 STOR,因此该次运行中 PR:L 是诚实的(AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H)。
产品ProFTPD
受影响版本1.3.9d (f59f248e26bdfa514443e42bf72a145641df635d) contrib mod_rewrite
认证实验为已认证的 STOR。若在 USER 或类似命令上配置预认证 RewriteRule,则为 PR:N。
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1

攻击者能做什么

RewriteEngine 在配置之前是关闭的。文档中的模式是 RewriteRule (.*) ${map:$1}。一旦 RewriteRule 将客户端参数送入 int:utf8trans,长度超过 1024 字节的键就会溢出会话子进程中的两个静态缓冲区。

方法汇聚点权限
FTP 命令,其参数为 utf8trans 映射键,长度 > 1024rewrite_utf8_to_ucs4 然后 utf8_val[i] = ucs4_longs[i]可用性(实验证实): 使会话子进程崩溃。ASan:global-buffer-overflow WRITE of size 8,然后 ABORTING。Prefork 模式下:新的登录仍然可用;守护进程保持运行。200 个 ASCII 字节的短 STOR 可正常存活。附近 rewrite BSS 的完整性为推断所得,取决于编译器布局。
RIP / 代码执行未声称已排除。 无载荷。类别为崩溃。并非 RCE。
通过 .ftpaccess 植入 RewriteMapCONF_DYNDIR已排除。 RewriteMap 不允许出现在 .ftpaccess 中。
prg: shell无此映射类型已排除。 FIFO 为行 I/O。

实验证实与推断: ASan 写入大小为 8、会话子进程中止、短参数对照存活、触发后登录均经实验证实。未声称 RIP/RCE。

Issue 2173 在此版本上修复了 int:unescape 的单字节越界。本遗留问题属于 int:utf8trans。不同的内置映射。不同的漏洞。

我是如何发现的

我固定了 proftpd/proftpd 标签 v1.3.9d。2026 年的 CVE 批次以及该 tarball 中仍存在的公开 GitHub issue(2170、2173、2175、2180、2095、2256、2286、2319、2330、2301)是跳过列表。使用示例 basic.conf 的默认核心 FTP 并未给我带来未公开的严重/高危漏洞。contrib rewrite 做到了。

rewrite_map_int_utf8trans(contrib/mod_rewrite.c)中有:

static unsigned char utf8_val[PR_TUNABLE_BUFFER_SIZE];   /* 1024 */
static unsigned long ucs4_longs[PR_TUNABLE_BUFFER_SIZE]; /* 1024 */
ucs4strlen = rewrite_utf8_to_ucs4(ucs4_longs, strlen(key), (unsigned char *) key);

rewrite_utf8_to_ucs4 为每个 ASCII 字节写入一个 unsigned long,且没有容量限制。PR_TUNABLE_CMD_BUFFER_SIZE 为 512 KiB。Issue 2173 已经修复了 unescape。此映射不在该修复范围内。

走过的弯路:将 2173 当作此漏洞;因为 ASan 报告写入大小为 8 就声称 RIP;期望 .ftpaccess 能植入 RewriteMap。第一个是另一个函数。第二个仍然只是崩溃。第三个是 CONF_DYNDIR。

ASan 加上原版 libcrypt 会在 PASS 阶段、到达 rewrite 汇聚点之前就触发 SIGSEGV。实验预加载了一个极小的 crypt(3) 桩,使登录可用。该桩并非漏洞利用。

实验环境

python3 proftpd-rewrite-utf8trans-Abraxas-Labs.py

或:

cd lab
./run.sh

回环 127.0.0.1:18740 加上被动端口 18741-18750。Compose 项目 proftpd-rewrite-utf8trans。见证字符串 PROFTPD-REWRITE-UTF8TRANS-WITNESS。镜像为 1.3.9d mod_rewrite 的 ASan 构建。200 个 ASCII 字节的对照 STOR 成功。2048 个 ASCII 字节的 STOR 触发 ASan global-buffer-overflow,写入大小为 8,会话子进程中止。触发后新的登录仍然可用。

SUCCESS PROFTPD-REWRITE-UTF8TRANS asan=global-buffer-overflow write=yes child-dead=yes PROFTPD-REWRITE-UTF8TRANS-WITNESS

修复方案

将 rewrite_utf8_to_ucs4 的目标长度限制为 PR_TUNABLE_BUFFER_SIZE-1。停止写入超出 ucs4_longs / utf8_val 的范围。拒绝或截断无法容纳的映射键。

参考资料

  • github.com/proftpd/proftpd 标签 v1.3.9d (f59f248e26bdfa514443e42bf72a145641df635d)
  • contrib/mod_rewrite.c rewrite_utf8_to_ucs4 / rewrite_map_int_utf8trans
  • 附近已修复(非此映射):Issue 2173 int:unescape
  • CWE-120

许可证

GNU Affero GPL v3.0。参见 LICENSE。仅限回环实验环境。无任何担保。

下载工具