如何构建 bash 来修补 shellshock 并在将其安装到系统根目录之前对其进行测试?

如何构建 bash 来修补 shellshock 并在将其安装到系统根目录之前对其进行测试?

下面的代码似乎有什么问题?我正在下载并修补到补丁 18,我知道这是针对 shellchock 漏洞的补丁。但运行 Bash 时我仍然遇到该漏洞。

下载源代码和补丁

wget http://ftp.gnu.org/gnu/bash/bash-3.1.tar.gz
wget http://ftp.gnu.org/gnu/bash/bash-3.1-patches/bash31-00{1..9} http://ftp.gnu.org/gnu/bash/bash-3.1-patches/bash31-0{10..18}

解压并应用补丁

tar -xvf bash-3.1.tar.gz
cd bash-3.1
find ../bash31-??? -exec /bin/sh -c 'patch -p0 <{}' \;

(补充:上面的 find 命令恰好因为 shell 通配符而返回一个排序列表,但我知道对于 find 查找来说这并不总是正确的)

配置、制作、安装

./configure --prefix /tmp/bash_patched && make && make install

运行 bash

/tmp/bash_patched/bin/bash

以下内容应返回/tmp/bash_patched/bin/bash 3.1.18(1)-release

echo $BASH $BASH_VERSION

进行炮弹冲击测试

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

对我来说这返回

busted
stuff

答案1

问题在于,测试在/bin/sh系统上仍然易受攻击,直到在 root 上安装。更好的测试是env X="() { :;} ; echo busted" /tmp/bash_patched/bin/bash -c "echo stuff"

答案2

shellshock 补丁实际上是 19 和 20。wget 不会下载这些补丁。尚未测试,但将第二个命令更改为

wget http://ftp.gnu.org/gnu/bash/bash-3.1-patches/bash31-00{1..9} http://ftp.gnu.org/gnu/bash/bash-3.1-patches/bash31-0{10..19} http://ftp.gnu.org/gnu/bash/bash-3.1-patches/bash31-020

应该让它发挥作用

答案3

您是否尝试查看超级用户问题 816787 中描述的脚本?它对我的 Ubuntu 机器来说非常有效,每台服务器(包括 VMware 快照)大约需要 15 分钟,无需重新启动。

相关内容