ShellShock(CVE-2014-6271)

漏洞简介

GNU Bash 4.3及之前版本在评估某些构造的环境变量时存在安全漏洞,向环境变量值内的函数定义后添加多余的字符串会触发此漏洞,攻击者可利用此漏洞改变或绕过环境限制,以执行Shell命令。某些服务和应用允许未经身份验证的远程攻击者提供环境变量以利用此漏洞。此漏洞源于在调用Bash Shell之前可以用构造的值创建环境变量。这些变量可以包含代码,在Shell被调用后会被立即执行。

这个漏洞的英文是:ShellShock,中文名被XCERT命名为:破壳漏洞。

该漏洞在Red Hat、CentOS、Ubuntu 、Fedora 、Amazon Linux 、OS X 10.10中均拥有存在CVE-2014-6271(即“破壳”漏洞)漏洞的Bash版本,同时由于Bash在各主流操作系统的广泛应用,此漏洞的影响范围包括但不限于大多数应用Bash的Unix、Linux、Mac OS X,而针对这些操作系统管理下的数据均存在高危威胁。

漏洞的利用方式会通过与Bash交互的多种应用展开,包括HTTP、OpenSSH、DHCP等

出现位置:vulhub-Tr0ll2ssh登录过程

环境部署

安装部署vulhub环境:https://www.cnblogs.com/Cl0ud/p/14195114.html

进入vulhub文件夹

Bash 破壳漏洞Shellshock (CVE-2014-6271)复现分析第1张

进入bash文件夹下的shellshock

Bash 破壳漏洞Shellshock (CVE-2014-6271)复现分析第2张

执行命令启动docker

docker-compose up -d

Bash 破壳漏洞Shellshock (CVE-2014-6271)复现分析第3张

服务起在8080端口

Bash 破壳漏洞Shellshock (CVE-2014-6271)复现分析第4张

本地漏洞检测

Bash 破壳漏洞Shellshock (CVE-2014-6271)复现分析第5张

进入docker容器

payload为: env x='() { :;}; echo shellshocked' bash –c "echo hi"

Bash 破壳漏洞Shellshock (CVE-2014-6271)复现分析第6张

如果输出shellshocked则表示存在漏洞

本地漏洞检测POC分析

口语化阐释一下漏洞原理:父进程中的特殊变量字符串(这里指字符串内容为函数)成为环境变量后,在子进程中调用该字符串时将其理解为函数执行

shell中函数定义:Shell 函数 | 菜鸟教程

#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

demoFun(){
    echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"

shell中定义变量

springbird="hi"

使用echo 输出

Bash 破壳漏洞Shellshock (CVE-2014-6271)复现分析第7张

然后开启以后新的进程后,可以看到$springbird变量没有继承到子进程中来

那么我们怎么样才能在子进程中使用父进程的变量呢?(自问自答)

可以将变量存储到环境变量中,这样就可以在父子进程中一起使用该变量了

我们使用export命令将其设置为环境变量,export简介:Linux export命令 | 菜鸟教程

如图:

Bash 破壳漏洞Shellshock (CVE-2014-6271)复现分析第8张

可以看到设置环境变量后子进程也能够使用该变量了

这个时候我们设置一个函数作为环境变量

x(){ echo "test"; }

如图

Bash 破壳漏洞Shellshock (CVE-2014-6271)复现分析第9张

可以看到子进程中也能成功执行该函数

这时候我们改变一点点

Bash 破壳漏洞Shellshock (CVE-2014-6271)复现分析第10张

创建字符串环境变量springbird

export springbird='() { cat /etc/passwd;}'

注意

(){之间有空格

可以看到我们创建的字符串变量被设置成环境变量后在子进程解释成了函数执行,成功读取了 /etc/passwd

所以触发并利用破壳漏洞的所需要的几点:

  • 被攻击的bash存在漏洞(版本小于等于4.3)
  • 攻击者可以控制环境变量
  • 新的bash进程被打开触发漏洞并执行命令

从上面的分析中可以看出,漏洞的根本原因存在于Bash的ENV命令实现上,因此漏洞本身是不能够直接导致远程代码执行的。如果要达到远程代码执行的目的,必须借助第三方服务程序作为媒介才能够实现,第三方服务程序也必须要满足众多条件才可以充当此媒介的角色。

漏洞原理

Bash使用的环境变量是通过函数名称来调用的,导致漏洞出问题是以(){开头定义的环境变量在命令ENV中解析成函数后,Bash执行并未退出,而是继续解析并执行shell命令。而其核心的原因在于在输入的过滤中没有严格限制边界,也没有做出合法化的参数判断。

偷图:

Bash 破壳漏洞Shellshock (CVE-2014-6271)复现分析第11张

插曲

访问靶场的漏洞文件时出现了500 Internal Server Error的错误,即访问http://靶场地址/victim.cgi时报错

进入容器内部

docker exec -it 6d40 bash

查看apache2error.log

Bash 破壳漏洞Shellshock (CVE-2014-6271)复现分析第12张

发现错误为权限不足:

[cgid:error] [pid 69:tid 140543753557888] (13)Permission denied: AH01241: exec of '/var/www/html/victim.cgi' failed

Bash 破壳漏洞Shellshock (CVE-2014-6271)复现分析第13张

修改其权限为755即可

chmod 755 victim.cgi

Bash 破壳漏洞Shellshock (CVE-2014-6271)复现分析第14张

漏洞利用

按照前面分析的漏洞原理,此处构造读取/etc/passwdpayload

() { :; }; echo; /bin/cat /etc/passwd

Bash 破壳漏洞Shellshock (CVE-2014-6271)复现分析第15张

可以看到打出了passwd

还有一个问题

但是我们在victim.cgi文件里面并没有看到调用环境变量,我们从User-agent里面打过去的payload为什么就生效了

Bash 破壳漏洞Shellshock (CVE-2014-6271)复现分析第16张

在这篇博文中提到:https://www.guildhab.top/?p=1805

CGI脚本会继承系统的环境变量。CGI环境变量在CGI程序启动时初始化,在结束时销毁。

当一个CGI脚本未被HTTP服务器调用时,它的环境变量几乎是系统环境变量的复制,当这个CGI脚本被HTTP服务器调用时,它的环境变量就会增加关于HTTP服务器,客户端,CGI传输过程等条目

也就是说,每当CGI脚本接收到一次HTTP请求,它的环境变量就会新增一些条目,比如User-agentConnection等信息

所以这里我们通过修改User-Agent来修改CGI环境变量

漏洞利用场景

  1. 程序在某一时刻使用 bash 作为脚本解释器处理环境变量赋值
  2. 环境变量的赋值字符串来源于用户输入 , 且没有通过有效的过滤

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/225307.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电商早报 | 12月7日| 阿里巴巴分红179亿,破历史记录

阿里巴巴将派发25亿美元年度股息 12月6日消息,阿里巴巴发布公告,将向截至2023年12月21日香港时间及纽约时间收市时登记在册的普通股持有人和美国存托股持有人,就2023财年首次派发年度股息,金额分别为每股普通股0.125美元或每股美…

【EI会议征稿中】2024年第四届数字信号与计算机通信国际学术会议(DSCC 2024)

2024年第四届数字信号与计算机通信国际学术会议(DSCC 2024) 2024 4th International Conference on Digital Signal and Computer Communications 第四届数字信号与计算机通信国际会议(DSCC 2024)将于2024年4月12日至14日在中国-香港举行。DSCC 2024旨…

MATLAB机器人对偏导数、雅克比矩阵、行列式的分析与实践

偏导数、雅克比矩阵、行列式都是非常重要的知识点,为了让大家更容易看懂,尽量使用画图来演示。 1、偏导数Partial derivative 对于导数我们已经很清楚了,某点求导就是某点的斜率,也就是这点的变化率。那么偏导数是什么&#xff…

抖去推微信小程序版:短视频矩阵系统视频剪辑+无人直播

短视频矩阵获客工具的出现,给矩阵号的管理及运营带来了极大的便利,大家可以批量生成作品,并且可以实现自动发布,极大的节省了人力物力。 然而,对于中小商家来说虽然很想购买一套这样的系统,但考虑到费用较高…

外贸平台自建站的教程?做海洋建站的好处?

外贸平台自建站怎么做?搭建网站的具体流程有哪些? 作为外贸从业者,借助互联网平台自建站点已经成为推广业务、拓展市场的一种重要手段。海洋建站将为您提供一份详尽的外贸平台自建站的教程,助您在网络空间中展现您的企业魅力。 …

备战2024年1月AMC8美国数学竞赛新方式:刷在线真题集(附资源)

今天是2023年12月7日,距离暂定于2024年1月19日举办的AMC8美国数学竞赛的举办日期还有42天,有志于尽早出国留学,或者小升初冲击名校的孩子们相信已经在如火如荼地利用课余时间上辅导班或者自学。 为了帮助大家提高备考2024年1月份AMC8竞赛的效…

QxOrm 如何自定义主键?

默认情况下QxOrm的主键是long类型自增的,但是有时候我们不想使用这个主键,想使用比如string类型的主键。 可以使用QX_REGISTER_PRIMARY_KEY宏定义另一种类型(例如,QString 类型)的唯一 id(主键&#xff09…

第 7 部分 — 增强 LLM 安全性的策略:数学和伦理框架

一、说明 增强大型语言模型 (LLM) 安全性的追求是技术创新、道德考虑和实际应用的复杂相互作用。这项努力需要一种深入而富有洞察力的方法,将先进的数学模型与道德原则和谐地融合在一起,以确保LLM的发展不仅在技术上稳健,而且在道德上合理且对…

实现简易的一对一用户聊天

服务端 package 一对一用户;import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector…

Linux 存储管理

内容概述 磁盘结构分区类型管理分区管理文件系统挂载设备管理swap空间(用来缓解内存空间不足情况)RAID 管理LVM管理LVM快照 1 磁盘结构 1.1 设备文件 块设备文件:数据的访问单位是块Block,一个块的IO 字符设备文件&#xff1a…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《计及需求响应与火–储深度调峰定价策略的电力系统双层优化调度》

这个标题似乎涉及到电力系统的双层优化调度问题,并考虑了两个关键方面:需求响应和火–储深度调峰定价策略。 电力系统双层优化调度:这指的是在电力系统中进行优化调度的过程。双层优化可能意味着系统具有两个层次的决策过程,通常是…

python实战—核心基础1(高考倒计时)lv1

目录 一、核心代码解释 二、代码 三、运行截图 一、核心代码解释 1、datetime模块 Python有一个名为datetime的模块,用于处理日期和时间。 datetime模块中定义的一个类是datetime类。 可以使用now()方法创建一个包含当前本地日期和时间的datetime对象。 impo…

外汇天眼:市场95%的输家都犯了这个错误,你也中招了吗?

下单的是人,由于人的不完美与无经验,因之会产生很多障碍,没有累积足够之经验,获得周全之要领前,通常会犯了主要是人就会不自觉犯下主观与判断上的差错,这也就是,95%为输家的原因。 由于投资人在…

安装和初始化 VyOS 虚拟机

目录 安装和初始化 VyOS虚拟机1. 安装VyOS系统(1)进入系统安装界面 2. 登录VyOS系统(1)安装 Image 镜像(2)进入初始话设置文字描述重启系统 3. 配置路由3.1 设置静态IP地址3.2 SSH端口设置3.3 删除网卡IP地…

uniapp实战 —— 自定义顶部导航栏

效果预览 下图中的红框区域 范例代码 src\pages.json 配置隐藏默认顶部导航栏 "navigationStyle": "custom", // 隐藏默认顶部导航src\pages\index\components\CustomNavbar.vue 封装自定义顶部导航栏的组件(要点在于:获取屏幕边界…

springboot 自定义响应

自定义响应类是指在开发中,根据业务需求自定义的用于封装接口响应数据的类。通常情况下,一个自定义响应类包含了接口返回的相关信息,如状态码、消息、数据等。 自定义响应类的设计灵活多样,可以根据具体的业务需求进行定义。一般…

Word文件设置了只读模式,为什么还能编辑?

Word文档设置了只读模式,为什么还可以编辑呢?,不过当我们进行保存的时候会发现,word提示需要重命名并选择新路径才能够保存,是因为什么呢?今天我们学习一下如何解决问题。 这种操作,即使可以编辑…

【用unity实现100个游戏之18】从零开始制作一个类CSGO/CS2、CF第一人称FPS射击游戏——基础篇3(附项目源码)

文章目录 本节最终效果前言素材人物移动音效枪口火焰和开火音效枪口灯光弹孔和火花添加武器随镜头手臂摇摆效果源码完结 本节最终效果 前言 本节主要实现添加音效,和一些特效、武器摆动调整。 素材 素材,为了方便我直接用了unity免费的音效输出&#…

zabbix的自动发现和注册、proxy代理和SNMP监控

目录 一、zabbix自动发现与自动注册机制: 1、概念 2、zabbix 自动发现与自动注册的部署 二、zabbix的proxy代理功能: 1、工作流程 2、安装部署 三、zabbix-snmp 监控 1、概念 2、安装部署 四、总结: 一、zabbix自动发现与自动注册…

matlab 点云放缩变换

目录 一、算法原理二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接。爬虫网站自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 缩放可以独立应用于三个坐标轴,如将点 ( x , y , z ) ( x