命令注入:
是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。
在Web应用中,有时候会用到一些命令执行的函数,如php中system、exec、shell_exec等,当对用户输入的命令没有进行限制或者过滤不严导致用户可以执行任意命令时,就会造成命令执行漏洞。
命令注入漏洞主要表现为以下两种形式:
1、攻击者能够算改程序执行的命令:攻击者直接控制了所执行的命令。
2、攻击者能够复改命今的执行环境:攻击者
间接控制了所执行的命令。
在这种情况下,我们
着重关注第一种情况,即攻击者控制所执行命令的可能性。这种形的 Command Injection漏洞在以下情况下发生:
1.数据从不可信赖的数据源进入应用程序
2.数据被用作代表应用程序所执行命令的字符串,或字符串的部分
3.通过命令的执行,应用程序会授予攻击者一种原本不该拥有的特权或能力
例1:下面这段来自系统实用程序的代码根据系统属性 APPHOME 来决定其安装目录,然后根据指定目录的相对路径执行一个初始化脚本。
... String home= System. getProperty( "APPHOME"); String cmd = home + INITCMD; java.lang Runtime. getRuntme( exec(cmd));//执行操作命令 ...
例1中的代码使得攻击者可通过修改系统属性 APPHOME而指向一个包含恶意版本 INITOMD的其他路径,从而提高自己右应用程序中的权限,继而随心所欲地执行命令。