[安全性] 部署服务器时的操作系统命令注入( `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 |
| 执行 | ChannelShell 由 printWriter.println(command) 驱动 |
eladmin-system/.../maint/util/ExecuteShellUtil.java:52-66 |
控制器接受一个 DeployHistory 对象,其 appName 字段是一个自由格式的 String。 DeployServiceImpl.serverReduction 将其未经修改地传递到命令字符串中,并通过 ExecuteShellUtil.execute 执行,该方法打开一个 JSch ChannelShell,通过 PrintWriter.println 将命令写入到 shell 输入流中,并读取回 stdout。 由于值被原生串接到一个 shell 行中,远程 shell 会解析任何元字符(;,|,``` ``,$()`, 换行符)。
内容来源: elunez/eladmin