我在新闻中读到Shellshock是Heartbleed之后的另一个更大的漏洞。 测试我们的Bash shell是否易受攻击的代码是:
env X="() { :;} ; echo shellshock" /bin/sh -c "echo completed"
详细说明,此代码如何正常工作?代码env X="() { :;} ;
做了什么?
如果我在shell易受攻击的Linux环境中托管网站,它是如何容易受到攻击的呢?
答案 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中的空语句。