菜单

命令注入

相关源文件

命令注入是一种安全漏洞,允许攻击者在易受攻击的应用程序内执行任意命令。当应用程序将不安全的、用户提供的数据传递给系统 shell 时,攻击者可以注入额外的命令,这些命令将以易受攻击应用程序的权限执行。

有关相关的注入技术,请参阅 SQL 注入(针对特定数据库的注入)或 服务器端模板注入(针对模板引擎的注入)。

理解命令注入

当应用程序将用户可控的数据合并到操作系统执行的命令中时,就会发生命令注入。如果应用程序没有正确验证或清理此输入,攻击者就可以插入命令分隔符或修饰符来执行任意命令。

攻击流程

来源:Command Injection/README.md46-66

命令注入漏洞通常发生在应用程序使用 system()exec() 或类似函数将用户输入直接串联到命令字符串中来执行 shell 命令时。

漏洞示例

如果攻击者输入类似 8.8.8.8; cat /etc/passwd 的内容,实际执行的命令将是:ping -c 4 8.8.8.8; cat /etc/passwd

来源:Command Injection/README.md51-65

命令执行技术

基本命令

命令注入的最简单形式涉及插入一个完整的命令,该命令将由系统 shell 执行。

来源:Command Injection/README.md67-77

命令链方法

来源:Command Injection/README.md80-96

参数注入

参数注入允许攻击者在只能将参数附加到现有命令时获得命令执行。

程序注入向量
Chromechrome '--gpu-launcher="id>/tmp/foo"'
SSHssh '-oProxyCommand="touch /tmp/foo"' foo@foo
psql`psql -o'

来源:Command Injection/README.md98-119

命令内部技术

可以使用以下方法将命令注入到其他命令中

  • 反引号original_cmd_by_server `cat /etc/passwd`
  • 命令替换original_cmd_by_server $(cat /etc/passwd)

来源:Command Injection/README.md139-151

过滤器绕过技术

应用程序通常会实现过滤器来防止命令注入。以下是绕过这些过滤器的技术

绕过空格限制

当空格被过滤时,可以使用几种替代方法

  1. 使用 $IFS(内部字段分隔符):

  2. 使用花括号扩展:

  3. 使用输入重定向:

来源:Command Injection/README.md155-175

绕过换行符和反斜杠

命令可以跨越多行

URL 编码形式:cat%20/et%5C%0Ac/pa%5C%0Asswd

来源:Command Injection/README.md196-219

字符过滤器绕过技术

来源:Command Injection/README.md242-343

字符过滤器绕过的示例

来源:Command Injection/README.md242-304

数据外泄技术

在实现命令执行后,攻击者通常需要从目标系统提取数据。

基于时间的 C 站数据外泄

此技术逐个字符地提取数据,使用时间延迟来确定字符猜测是否正确

来源:Command Injection/README.md354-373

DNS 数据外泄

此技术使用 DNS 查询来泄露数据,而 DNS 查询通常不太可能被监控或阻止

基于 DNS 的外泄在线工具

  • dnsbin.zhack.ca
  • app.interactsh.com
  • Burp Collaborator

来源:Command Injection/README.md375-391

多语言命令注入

多语言命令注入 payload 在多种上下文中都是有效且可执行的,例如在不同的引号类型中。

示例 1

1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}

此 payload 在没有引号、单引号和双引号的上下文中均有效。

来源:Command Injection/README.md393-406

实用技巧

后台运行长期运行的命令

对于可能因超时机制而被终止的长期运行命令,请使用 nohup 使进程在父进程退出后继续运行

来源:Command Injection/README.md421-428

注入后删除参数

在类 Unix 系统中,-- 符号表示命令选项的结束

当您需要确保注入后的参数不被作为选项处理时,这会很有用。

来源:Command Injection/README.md430-432

命令注入工具

工具描述
commixproject/commix自动一体化操作系统命令注入和利用工具
projectdiscovery/interactsh一个 OOB 交互收集服务器和客户端库

来源:Command Injection/README.md40-43

测试资源

有几个实验室可供练习命令注入技术

  • PortSwigger Web Security Academy - OS 命令注入实验室
  • Root Me 挑战(PHP 命令注入,过滤器绕过)

来源:Command Injection/README.md434-444