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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
vsftpd-cmds-denied-alias — vsftpd 3.0.5 - 高危 - 远程 - 权限残留 - cmds_denied 遗漏 RFC 别名 (XRMD) | Kitploit
工具/GitHubGitHub/abraxas/vsftpd-cmds-denied-alias
防御工具漏洞分析漏洞利用配置审计网络安全渗透测试论文与研究实验室与实践
GitHubabraxas/vsftpd-cmds-denied-alias

vsftpd-cmds-denied-alias

vsftpd 3.0.5 - 高危 - 远程 - 权限残留 - cmds_denied 遗漏 RFC 别名 (XRMD)

查看仓库
2910天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - vsftpd-cmds-denied-alias

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  vsftpd-cmds-denied-alias

技术分析文章:https://abraxaslabs.tech/research/vsftpd-cmds-denied-alias

vsftpd-cmds-denied-alias

类别: 权限残留 可达性: 远程

vsftpd 3.0.5 - Chris Evans

我固定使用的是官方 tarball,而非 GitHub 镜像,也非发行版分支。SHA-256 26b602ae454b0ba6d99ef44a09b6b9e0dfa7f67228106736df1f278c70bc91d3。vsftpver.h VSF_VERSION "3.0.5"。

cmds_denied 在 process_post_login(postlogin.c:140-184)中执行精确的大写令牌匹配。随后分发阶段会将 RFC 775 别名按位或到同一组处理函数上:RMD||XRMD(:263-264),此外还有 CWD||XCWD、MKD||XMKD、PASV||P@SW,以及独立的 EPSV / STOU / APPE。运维人员若将 RMD 加入拒绝列表(常见的 DELE,RMD 配方),XRMD 仍然可以执行 rmdir。

这一残留问题属于已认证 FTP 完整性范畴,发生在运维人员以为已经封闭的拒绝列表之下。它不是未认证、不是 root、不是 chroot 逃逸,也不是 RCE。

ID暂无 CVE
类别权限残留(cmds_denied 精确令牌)
可达性远程(已认证 FTP)
CWECWE-863
CVSS高危:7.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
产品vsftpd(Chris Evans)
受影响版本vsftpd 3.0.5 官方 tarball
认证FTP USER/PASS(实验环境:匿名 ftp)
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1:18720

攻击者能做什么

谁:在运维人员设置了 cmds_denied 的守护进程上,一个已认证的 FTP 用户(匿名或本地)。默认未设置。man 手册中提到的虚拟用户配方共享同一个 guest uid,因此 Unix DAC 无法将它们区分开。会话在通常的 chroot 内已经是映射后的 uid。cmds_denied 本应是用来剥夺该动词的额外控制手段。

完整性(实验验证)

方法 + 汇点权限
在 cmds_denied=RMD 后执行 XRMD labdirhandle_rmd -> str_rmdir,删除会话 uid 可通过 Unix rmdir 删除的目录。实验:RMD labdir 550,XRMD labdir 250,CWD labdir 550(目录已消失)。随后 MKD labctrl 在 RMD 下仍为 550。

完整性(由同一精确令牌门控推断;非实验验证)

方法 + 汇点权限
在 cmds_denied=MKD 后执行 XMKD dirhandle_mkd -> 以会话 uid 执行 mkdir
在 cmds_denied=CWD 后执行 XCWD pathhandle_cwd -> chdir。若 download_enable 开启则随后可 RETR
在 cmds_denied=STOR 后执行 STOU / APPEhandle_upload_common 创建 / 追加。需要 write_enable
在 cmds_denied=PASV 后执行 EPSV / P@SWhandle_pasv 打开一个数据监听器,而拒绝列表本应阻止它

实验仅验证了 RMD 之后的 XRMD。其他别名共享相同的 str_equal 门控以及分发阶段相同的按位或。我未对它们进行测试。

侦察

作为一类残留问题,无侦察能力。cmds_denied 并非隐藏手段。XRMD 不会列出名称。

可用性

不在评估范围内。删除目录属于完整性影响。之后对该名称的 CWD / RETR 会作为副作用返回 550。

此残留问题不授予的能力

  • 未认证状态下的 cmds_denied(登录前会被忽略;USER/PASS/QUIT 仍属于登录前的命令表)
  • Root
  • Chroot 逃逸(allow_writeable_chroot 默认关闭;实验环境仅在 /incoming 下写入,因此拒绝规则仍然生效)
  • cmds_allowed 采用失败即拒绝(fail-closed)策略:未列出的动词(包括 XRMD)仍返回 550
  • write_enable=NO 仍会阻止写入类命令(STOR/MKD/RMD/DELE/RNFR/RNTO/SITE/APPE/STOU)
  • 当用户不共享同一 uid 时,由 Unix DAC 生效
  • SITE 与 site 的大小写绕过(ftpcmdio.c 中的 str_upper)
  • cmds_denied=CHMOD 永远不会匹配;要禁用 chmod,请使用 chmod_enable=NO 或 cmds_denied=SITE

我是如何发现的

我在官方 3.0.5 上针对 hide/deny/cmds_denied 进行了排查。该检查只是对逗号分隔的 token 做一次遍历,并将大写后的动词与 str_equal 进行比较。handle_rmd 内部没有第二道检查。RFC 775 仍将 XRMD 作为 RMD 提供。常见的建议是 cmds_denied=DELE,RMD。但该字符串从未指定 XRMD。

错误方向:将 SITE 与 site 视为一种绕过。动词会被转换为大写。对 cmds_allowed 也做同样处理:该列表采用失败即拒绝策略,因此未列出的别名仍会被拒绝。

实验环境

cd lab
./run.sh

回环地址 127.0.0.1:18720。Compose 项目 vsftpd-cmds-denied-alias。官方 3.0.5 tarball 位于 lab/(SHA-256 见上)。cmds_denied=RMD、write_enable=YES、匿名访问,仅允许在 /incoming 下写入。见证字符串 VSFTPD-CMDS-DENIED-ALIAS-WITNESS。最后一行:

SUCCESS vsftpd-cmds-denied-alias rmd=550 xrmd=250 dir-gone=yes VSFTPD-CMDS-DENIED-ALIAS-WITNESS

修复

在拒绝现代动词时同时拒绝 RFC 别名,或在 cmds_denied 中匹配别名(XCWD / XMKD / XRMD / XPWD / XCUP / P@SW / EPSV / STOU / APPE)。优先使用 cmds_allowed(允许列表)。

供应商接收渠道为 [email protected](vsftpd)。无偿。请勿在任何 vsftpd 镜像上公开提交 GitHub issue。

联系方式

Abraxas Labs - abraxaslabs.tech - github.com/abraxas - @abraxas_null - [email protected]

下载工具