linux - 有人能解释一下这个 "Shellshock"代码在 shell 中是如何工作的吗

标签 linux bash shell security shellshock-bash-bug

<分区>

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

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

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

如果我在 shell 易受攻击的 Linux 环境中托管网站,它如何易受攻击以及是否会被利用?

最佳答案

env x='() { :;}; echo vulnerable' bash -c "echo 这是一个测试"

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 中的空语句。

关于linux - 有人能解释一下这个 "Shellshock"代码在 shell 中是如何工作的吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26052189/

相关文章:

linux - 文件行在执行时被更改

ios - "Return;"堆栈跟踪中的父方法

node.js - 如何更改 npm install 的 shell

bash - 每次音量为零时,如何使用 ffmpeg 分割 mp4 视频?

shell - 在术语哑绘图模式下在 gnuplot 生成的图形中注入(inject)颜色

windows - 更好的 Windows 命令行 shell

linux - 在 Bash 中将 printf 传递给 ls?

linux - 圣人安装丢失文件

linux - Bash 多少天以来

c++ - strace: SIGFPE 在任何事情发生之前