有人能解释一下这个" Shellshock"代码在shell中工作

时间:2014-09-26 04:43:02

标签: linux bash shell security shellshock-bash-bug

我在新闻中读到ShellshockHeartbleed之后的另一个更大的漏洞。 测试我们的Bash shell是否易受攻击的代码是:

env X="() { :;} ; echo shellshock" /bin/sh -c "echo completed"

详细说明,此代码如何正常工作?代码env X="() { :;} ;做了什么?

如果我在shell易受攻击的Linux环境中托管网站,它是如何容易受到攻击的呢?

1 个答案:

答案 0 :(得分:4)

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

env做了什么?

从文档中,env在修改后的环境中运行程序。

env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]

很明显,x是名称/变量,() { :;}; echo vulnerable'是变量的值。

现在,() { :;};是什么?

导出函数时,Bash将其defenition存储为环境变量中的值:

$ x() {echo hello world;}
$ export x
$ env | grep x
x=() {echo hello world};

现在,当x='() {:;}'与写作相似时

$ x() {:;}
$ export x
$ env | grep x

也就是说,我们间接地将export x放到env创建的新环境中。这里:是Bash中的空语句。