ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Vulhub 复现 Bash Shellshock 远程命令注入漏洞(CVE-2014-6271)实战指南

Vulhub 复现 Bash Shellshock 远程命令注入漏洞(CVE-2014-6271)实战指南 Vulhub 复现 Bash Shellshock 远程命令注入漏洞CVE-2014-6271实战指南【免费下载链接】vulhubPre-Built Vulnerable Environments Based on Docker-Compose项目地址: https://gitcode.com/GitHub_Trending/vu/vulhubCVE-2014-6271Shellshock俗称破壳漏洞是 Bash 在解析环境变量中函数定义时存在的严重命令注入漏洞可被远程攻击者通过伪造 HTTP 请求头触发任意命令执行。本文基于 Vulhub 仓库中 bash/CVE-2014-6271 目录下的预构建环境完整讲解漏洞原理、环境搭建、利用复现与修复验证全流程。读完本文你将能够独立复现该漏洞理解环境变量函数定义 CGI 请求头传递的攻击链路并掌握如何区分易受攻击与已修复的 Bash 版本。漏洞背景与原理为什么 User-Agent 能变成命令CVE-2014-6271 的根因在于 Bash 4.3 及更早版本处理环境变量时的一个设计缺陷当环境变量的值以()开头时Bash 会将其当作函数定义进行解析而在解析完函数体后不会立即停止解析而是会继续执行函数定义之后跟随的命令。以本环境中的攻击载荷为例() { foo; }; echo Content-Type: text/plain; echo; /usr/bin/id该字符串被 Bash 解析为定义一个名为foo的空函数然后依次执行echo Content-Type: text/plain、echo与/usr/bin/id。关键在传递链路Apache 等 Web 服务器在处理 CGI 请求时会把 HTTP 请求头如User-Agent、Host、Referer等以HTTP_*前缀的形式导出为 CGI 脚本进程的环境变量。当 CGI 脚本的 shebang 指向 Bash 时Bash 一启动就会遍历并解析这些环境变量于是被注入到User-Agent中的恶意函数定义被当作合法函数解析其后的命令随之被执行——远程命令注入就此成立。环境搭建一键启动漏洞靶场本实验环境位于仓库 bash/CVE-2014-6271 目录完整文件包括docker-compose.yml服务编排victim.cgi易受攻击的 CGI 脚本safe.cgi已修复的 CGI 脚本1.png 与 2.png利用效果截图在进入该目录后执行docker compose build docker compose up -d服务启动后访问http://your-ip:8080/可以看到两个 CGI 页面入口victim.cgi由 Bash 4.3 生成存在 Shellshock 漏洞safe.cgi由最新版 Bash 生成已修复漏洞容器编排与镜像说明查看 docker-compose.yml 可以了解环境结构version: 2 services: web: image: vulhub/bash:4.3.0-with-httpd ports: - 8080:80 volumes: - ./safe.cgi:/var/www/html/safe.cgi - ./victim.cgi:/var/www/html/victim.cgi要点说明镜像vulhub/bash:4.3.0-with-httpd宿主端口8080映射到容器内 Apache 的80端口挂载仓库内的两个 CGI 脚本通过 volume 直接挂载进 Apache 的 Web 根目录/var/www/html/便于自定义修改 payload 与测试页面Apache CGI 支持镜像底层 base/bash/4.3.0/with-httpd/Dockerfile 中通过a2enmod cgi/a2enmod cgid开启 CGI 模块并在 Apache 配置中声明.cgi由cgi-script处理器执行AddHandler cgi-script .cgi、Options ... ExecCGI这正是请求头能被注入进 Bash 进程环境的前提。Bash 4.3 是如何被编译进镜像的基础镜像 base/bash/4.3.0/Dockerfile 从 GNU 官方源码编译了存在漏洞的 Bash 4.3FROM debian:jessie ... RUN mkdir /tmp/bash \ wget -qO- https://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz \ | tar zx -C /tmp/bash --strip-components1 \ cd /tmp/bash \ ./configure --prefix/usr/local/bash-4.3.0 \ make \ make install ... ENV PATH /usr/local/bash-4.3.0/bin:${PATH}注意安装前缀被指定为/usr/local/bash-4.3.0使得漏洞版本与系统自带 Bash 共存。这一设计直接体现在两个 CGI 脚本的 shebang 差异上——这也是本环境一靶一盾对比实验的核心机制victim.cgi 第一行使用#!/usr/local/bash-4.3.0/bin/bash强制以存在漏洞的 Bash 4.3 解释执行从而复现 CVE-2014-6271safe.cgi 第一行使用#!/bin/bash即 Debian 系统自带的已修复版本作为对照组验证补丁效果。两个脚本的页面主体完全一致都只是输出Content-type: text/html与一段 Hello world HTML唯一的差异就是解释器从而保证对比实验只受 Bash 版本这一个变量影响。漏洞利用在 User-Agent 中注入命令使用 curl或其他任意 HTTP 客户端向victim.cgi发起请求将恶意载荷附在User-Agent请求头中curl -v -H User-Agent: () { foo; }; echo Content-Type: text/plain; echo; /usr/bin/id http://your-ip:8080/victim.cgi请求到达 Apache 后User-Agent被导出为 CGI 进程的环境变量HTTP_USER_AGENTBash 4.3 在解析该函数定义后继续执行了注入的命令。返回结果中可以看到/usr/bin/id的输出uid33(www-data) gid33(www-data) groups33(www-data)即攻击者已成功在目标服务器上以 Web 服务用户www-data的身份执行了系统命令。同时载荷中的echo Content-Type: text/plain会向 HTTP 响应头注入Content-Typeecho则输出一个空行以结束响应头区段确保命令输出能作为响应体被直接返回给攻击者——这是让漏洞利用结果可视化的常用技巧。攻击效果截图上图为真实利用效果左侧请求携带恶意User-Agent访问victim.cgi右侧响应返回uid33(www-data)的命令执行结果漏洞利用成功。攻击载荷解析本载荷可拆解为三段理解片段作用() { foo; };构造一个空函数定义触发 Bash 对函数定义后跟随命令的解析缺陷echo Content-Type: text/plain; echo;注入 HTTP 响应头并输出空行让命令结果以响应体形式返回/usr/bin/id要执行的任意系统命令此处以id验证命令执行能力实战中可替换为任意命令如反弹 Shell修复验证同一攻击对 safe.cgi 无效将同样的请求发给对照组的safe.cgicurl -v -H User-Agent: () { foo; }; echo Content-Type: text/plain; echo; /usr/bin/id http://your-ip:8080/safe.cgi由于safe.cgi由已修复的 Bash 解释执行环境变量中的函数定义被完整解析为函数后立即终止不再继续执行其后的命令。服务器返回的是正常的Content-Type: text/html页面Hello world HTML 内容没有任何命令输出如上图所示左侧仍是相同的恶意User-Agent但右侧响应体为正常 HTML、Content-Type: text/html说明注入命令未被执行漏洞已得到修复。复现后的检测与防护要点完成实验后可通过以下方式清理与自查# 停止并移除容器 docker compose down在实际安全场景中可参考本实验的检测与防护思路漏洞检测对任意暴露的 CGI 端点用上述User-Agent载荷发起探测观察响应中是否出现命令输出或非预期的Content-Type响应头修复升级升级 Bash 至包含 CVE-2014-6271 补丁的版本如本环境safe.cgi使用的 Debian 自带 Bash官方补丁已确保解析完函数定义后立即停止执行后续内容攻击面收敛该漏洞的触发依赖 Bash 被用作 CGI 解释器且攻击面覆盖User-Agent、Host、Referer、Cookie等所有会被导出为环境变量的请求头除升级 Bash 外应尽量减少 CGI 场景下 Bash 的使用必要时可限制外部请求头向进程环境的传递。小结通过本环境可以在几分钟内完整走通 CVE-2014-6271 的环境变量注入 → Bash 函数解析缺陷 → 任意命令执行攻击链路victim.cgiBash 4.3证明漏洞可利用safe.cgi已修复 Bash证明补丁有效两者基于同一份页面源码与同一个 Apache 环境仅解释器不同是理解该漏洞成因与修复差异的最小可复现实验。【免费下载链接】vulhubPre-Built Vulnerable Environments Based on Docker-Compose项目地址: https://gitcode.com/GitHub_Trending/vu/vulhub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表