1.Command Injection 命令注入
命令注入(Command Injection)漏洞也称为远程命令/代码执行漏洞(RCE,Remote Command/Code Exec),指应用程序的某些功能需要调用可以执行系统命令的函数,如果这些函数或者函数的参数能被用户控制,就可能通过命令连接符将恶意命令拼接到正常的函数中,从而随意执行系统命令,属于高危漏洞之一。命令注入是滥用应用web应用程序的行为从而实现在操作系统上执行命令,在执行命令时将获得与操作系统上应用程序相同的权限。例如,在以user1的用户身份运行的Web服务器上执行命令注入,将在对应的操作系统用户user1权限下执行命令,从而获得用户user1所拥有的系统权限。
在Web应用中,有时候会用到一些命令执行的函数,如php中system、exec、shell_exec等,当对用户输入的命令没有进行限制或者过滤不严导致用户可以执行任意命令时,就会造成命令执行漏洞。比如PHP中的eval()函数,可以将函数中的参数当做PHP代码来执行,如果这些函数的参数控制不严格,可能会被利用,造成任意代码执行。
例如,使用ping命令测试IP,正常输入一个IP或者域名会返回一个正常的返回结果。当输入恶意构造的语句www.baidu.com && netstat -an,会把后面的语句也给执行了。
2.漏洞场景
通常使用用户输入的数据来填充系统命令的应用程序可能存在命令注入漏洞,大多数存在于可被攻击者修改的缺少输入验证的地方(forms, cookies, HTTP headers etc.)。不用操作系统使用的注入语法、命令不一样。命令注入漏洞可以通过以下两种方式进行检测:盲注类型的命令注入(无回显)、详细的命令注入(有回显)。
Blind(盲注类型,无回显)类型的命令注入,在测试payload时应用程序并没有直接输出结果,必须设法调查应用程序的行为以确定你的payload是否成功执行。
盲注类型的命令注入在发生命令注入攻击时,并没有可见的输出显示