我想知道,现在最新版本的sh,bash,ksh等可以通过执行这个(非常简单的)脚本来获取命令注入吗?
#!/bin/sh
echo "What is the name of the program you are looking for?"
read program
locate $program
尽管如果他们有shell当然可以执行代码,我只是想知道变量是否可以包含恶意代码,例如在PHP中:
parameter=parameter;ls
此问题中也可以忽略shellshock(env变量)。
答案 0 :(得分:1)
是的,有可能。但它并不像你提到的那么简单。 见下面的一些例子。
它无效:
$ read -p "Type some text:" var1
Type some text:Example;hostname
$ echo $var1
Example;hostname
$ $var1
Example;hostname: command not found
但如果你这样使用,是的,它会起作用:
$ read -p "Type some text:" var1
Type some text:hostname
$ echo $var1
hostname
$ $var1
SSBLZMVM1
答案 1 :(得分:1)
如果这样写,你永远不知道是否有一个shell实现可能会被欺骗。但是,通过将locate的参数放在引号中,您可以安全地使用。然后,展开的参数将被视为单个字:
#!/bin/sh
echo "What is the name of the program you are looking for?"
read program
locate "${program}"