【问题标题】:Can someone explain how this "Shellshock" code works in shell [duplicate]有人可以解释一下这个“Shellshock”代码在shell中是如何工作的吗?
【发布时间】:2014-12-06 13:53:46
【问题描述】:
我在新闻中看到Shellshock 是继Heartbleed 之后的另一个更大的漏洞。
测试我们的Bash shell 是否易受攻击的代码是:
env X="() { :;} ; echo shellshock" /bin/sh -c "echo completed"
详细来说,这段代码究竟是如何工作的?代码env X="() { :;} ; 有什么作用?
如果我在 shell 易受攻击的 Linux 环境中托管网站,它是如何易受攻击的?它会被利用吗?
【问题讨论】:
标签:
linux
bash
shell
security
shellshock-bash-bug
【解决方案1】:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
env 是做什么的?
根据文档,env 在修改后的环境中运行程序。
env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]
很明显x 是一个名称/变量,() { :;}; echo vulnerable' 是变量的值。
现在,() { :;}; 是什么?
导出函数时,Bash 将其定义作为值存储在环境变量中:
$ x() {echo hello world;}
$ export x
$ env | grep x
x=() {echo hello world};
现在,x='() {:;}' 的意思类似于写作
$ x() {:;}
$ export x
$ env | grep x
也就是说,我们间接地将export x 放到了env 创建的新环境中。这里: 是 Bash 中的空语句。