#906·eladmin

[安全性] 部署服务器时的操作系统命令注入( `appName` )

作者: Ku4D3创建于 2026年6月25日更新于 2026年6月25日
阶段 组件 位置
DeployController.serverReduction 绑定 @RequestBody DeployHistory.appName eladmin-system/.../maint/rest/DeployController.java:126-131
身份验证网关 @PreAuthorize("@el.check('deploy:edit')") DeployController.java:127
目标(命令构建) executeShellUtil.execute("rm -rf " + deployPath + FILE_SEPARATOR + resources.getAppName()) eladmin-system/.../maint/service/impl/DeployServiceImpl.java:369
执行 ChannelShellprintWriter.println(command) 驱动 eladmin-system/.../maint/util/ExecuteShellUtil.java:52-66

控制器接受一个 DeployHistory 对象,其 appName 字段是一个自由格式的 StringDeployServiceImpl.serverReduction 将其未经修改地传递到命令字符串中,并通过 ExecuteShellUtil.execute 执行,该方法打开一个 JSch ChannelShell,通过 PrintWriter.println 将命令写入到 shell 输入流中,并读取回 stdout。 由于值被原生串接到一个 shell 行中,远程 shell 会解析任何元字符(;,|,``` ``,$()`, 换行符)。