有人可以解释这个“Shellshock”代码如何在shell中工作

我读到了这个消息:在Heartbleed之后, Shellshock是另一个更大的漏洞。 testing我们的Bash shell是否易受攻击的代码是:

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

详细地说,这个代码是如何工作的? 代码env X="() { :;} ;做什么的?

它如何容易受到攻击,如果我在一个Linux环境下托pipe一个网站,而这个网站的shell是脆弱的,它会被利用吗?

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

env做什么的?

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

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

很显然, x是一个名称/变量, () { :;}; echo vulnerable' () { :;}; 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 xenv创建的新环境中。 这里:在Bash中是一个空语句。