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)

查看仓库
43天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - vsftpd-cmds-denied-alias

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  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)中是对大写 token 的精确匹配。随后分发时会把 RFC 775 别名 OR 到同一批处理函数上: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 精确 token)
可达性远程(已认证 FTP)
CWECWE-863
CVSSHigh: 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 page 中提到的虚拟用户配方共享同一个 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。

完整性(从同一精确 token 门控推断;非实验环境)

方法 + 汇聚点权限
在 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 门控以及分发中的同一个 OR。我没有实际测试它们。

侦察

作为一等残留,没有。cmds_denied 不是隐藏。XRMD 不会列出名称。

可用性

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

这个残留不会授予什么

  • 未认证的 cmds_denied(登录前会忽略它;USER/PASS/QUIT 仍属于登录前表)
  • Root
  • Chroot 逃逸(allow_writeable_chroot 默认关闭;实验环境只在 /incoming 下写入,因此拒绝仍然成立)
  • cmds_allowed 失败关闭:未列出的动词包括 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_enable=NO 或 cmds_denied=SITE 来阻止 chmod

我是如何发现的

我在官方 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]

下载工具