Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 227

命令注入

审核人Cybersecurity entrepreneur & security researcher

命令注入 是什么?

命令注入用户输入未经过滤就传入操作系统 shell,导致应用程序执行攻击者提供命令的攻击。


命令注入(OS 命令注入)发生在应用程序将不可信输入拼接成系统命令,并将结果交给 shell 执行时。;&|$() 或反引号等元字符让攻击者能够追加额外命令,这些命令以应用进程的权限运行。其后果包括任意文件读写、横向移动、反向 shell,乃至完整接管服务器。它归属于 OWASP Top 10 中的"注入"类别(A03:2021),并被登记为 CWE-78。

问题的根源在于 shell 的元字符解释器,而非输入本身,因此关键的区别在于:是调用 shell(system()os.systemRuntime.exec("sh -c ...")、反引号),还是携带参数向量直接调用目标程序(execvesubprocess.run([...], shell=False)ProcessBuilder)。基于参数数组的 API 会将每个 token 作为字面量传递,元字符因此永远不会进入解析器。一个相关变体是参数注入,它滥用程序自身的选项标志(例如向 gitcurlssh 中夹带 --output-o ProxyCommand),即便根本没有调用 shell 也能生效。

在网络边缘设备上,其现实危害极为严重。CVE-2024-3400(CVSS 10.0)是 Palo Alto Networks PAN-OS 的 GlobalProtect 功能中的一个无需身份验证的 OS 命令注入漏洞,自 2024 年 4 月起被 Volexity 追踪为 UTA0218 的攻击者作为零日漏洞利用,用于植入反向 shell 并窃取防火墙配置。Ivanti Connect Secure 中的 CVE-2024-21887 与身份验证绕过漏洞 CVE-2023-46805 组合利用,实现了无需身份验证的命令执行,并在 2024 年初遭到大规模利用。2014 年的 Shellshock 漏洞(CVE-2014-6271)让攻击者能够通过 Bash 解析的、精心构造的环境变量注入命令,可经由 CGI、DHCP 和 SSH 触达。

防御措施:借助参数数组 API 彻底避开 shell;对预期值实施严格的白名单;剔除危险的选项标志与元字符;以最小权限用户在沙箱/容器中运行服务;并实施出站流量过滤,使攻击者取得的立足点无法回连外部。

flowchart TD
  A[用户输入:hostname] --> B{拼入命令}
  B -->|"os.system('ping ' + host)"| C[shell 解释元字符]
  C --> D["host = 127.0.0.1; cat /etc/shadow"]
  D --> E[攻击者命令以应用用户身份运行]
  E --> F[反向 shell / 数据外泄 / 接管]
  B -->|"subprocess.run(['ping', host], shell=False)"| G[参数作为字面量 token 传递]
  G --> H[无 shell 解析——注入被消除]
  style F fill:#c0392b,color:#fff
  style H fill:#27ae60,color:#fff

示例

  1. 01

    拼接主机名参数的 ping 工具允许通过 127.0.0.1; cat /etc/shadow 暴露密码哈希。

  2. 02

    图像处理接口调用 ImageMagick 时,精心构造的文件名触发攻击者命令执行。

常见问题

命令注入 是什么?

用户输入未经过滤就传入操作系统 shell,导致应用程序执行攻击者提供命令的攻击。 它属于网络安全的 攻击与威胁 分类。

命令注入 是什么意思?

用户输入未经过滤就传入操作系统 shell,导致应用程序执行攻击者提供命令的攻击。

如何防御 命令注入?

针对 命令注入 的防御通常结合技术控制与运营实践,详见上方完整定义。

命令注入 还有哪些其他名称?

常见的别称包括: OS 命令注入, Shell 注入。

相关术语

另见