我读到了这个消息:在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 x
到env
创建的新环境中。 这里:
在Bash中是一个空语句。