(1)<和>字符分别用于将一个文件的内容指向命令的输入以及将命令的输出指向一个文件。如果不可能使用前面的技巧注入一个完全独立的命令,仍然可以使用<和>字符读取及写入任意文件的内容。
(2)应用程序调用的许多操作系统命令接受大量控制其行为的命令行参数。通常,用户提交的输入以这种参数的形式传送给命令处理,只需在相关参数后插入一个空格,就可以在空格后添加另外一个参数。例如,一个Web创作应用程序可能拥有一项功能,允许服务器获得一个用户指定的URL,然后将它的内容呈现在浏览器上进行编辑。如果应用程序调用wget程序,那么就可以通过附加wget使用的–O命令行参数,在服务器的文件系统中写入任何文件的内容。例如:
提示
许多命令注入攻击要求注入空格以分隔命令行自变量。如果攻击者发现应用程序过滤空格,并且攻击的是UNIX平台,那么他可以使用包含空白符字段分隔符的$IFS环境变量代替空格。
动态执行漏洞最常见于PHP和Perl等语言。但基本上,任何应用程序平台都可能会向基于脚本的解释器(有时位于其他后端服务器上)传送用户提交的输入。