安云网 - AnYun.ORG | 专注于网络信息收集、网络数据分享、网络安全研究、网络各种猎奇八卦。
当前位置: 安云网 > 知识学堂 > 安全科普:让高大上的Bash破壳漏洞不再难理解

安全科普:让高大上的Bash破壳漏洞不再难理解

时间:2014-11-06来源: 作者:嘎巴嘎巴点击:
简介“破壳”是一个严重漏洞的别名,在Red Hat、CentOS、Ubuntu 、Fedora 、Amazon Linux 、OS X 10.10中均拥有存在CVE-2014-6271(即“破壳”漏洞)漏洞的Bash版本,同时由于Bash在各主流操作系统的广泛应用,此漏洞…

简介

//安云网咨询系统

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

//copyright AnYun.ORG

漏洞的利用方式会通过与Bash交互的多种应用展开,包括HTTP、OpenSSH、DHCP等,FreeBuf的相关报道请戳“ //安云网,anyun.org

本文首先从基础讲解一些Bash知识,并尝试理解“破壳”漏洞的一些细节,其次会手把手的带领读者搭建一个漏洞实验环境,并尝试利用这个漏洞进行测试。 //安云网咨询系统

什么是“破壳"漏洞?

//安云网咨询系统

“破壳”是Bash(GNU Bourne Again Shell)中出现的允许攻击者通过环境变量执行任意命令的漏洞。 //内容来自AnYun.ORG

//copyright AnYun.ORG

检查你的计算机是否存在此漏洞

//安云网,anyun.org

bash --version
env x='() { :;}; echo shellshocked' bash –c "echo test" //内容来自AnYun.ORG 

当你的GNU Bash 版本小于等于4.3或出现以下回显则会证明存在此漏洞: //ANYUN.ORG

//ANYUN.ORG

//本文来自安云网

“破壳“漏洞探究,这条测试命令到底哪里危险? //copyright AnYun.ORG

现在你很有可能会问这样几个问题,当然这一部分也是本文的重点: //本文来自安云网

刚才那条命令是做什么的?
执行那条命令后为什么就证明存在漏洞? //安云网,anyun.org 

别着急,这篇文章是面向新手的,自然要从基础讲起。
//安云网咨询系统

0×01 bash shell 变量基础

//内容来自安云网

echo命令:
$ echo"shellshock" //内容来自AnYun.ORG 
定义个变量然后再echo:
$ gaba="shellshock"
$ echo $gaba 
//安云网咨询系统

就像这样:

//安云网,anyun.org

//内容来自安云网

我们现在可以试试开一个bash子进程来看一下我们能不能得到变量的值: //内容来自AnYun.ORG

$ gaba="shellshock"
$ echo $gaba
shellshock
$bash
$echo $gaba
$ //copyright AnYun.ORG 

//内容来自安云网

没有回显,我们不能够读出变量的值是因为我们开启了一个bash子进程,但变量中的值,仍存在父进程中。

//copyright AnYun.ORG

0×02 bash环境变量基础

//本文来自安云网

当你开启一个shell会话时,一些变量已经准备好可供使用了,这些变量成为环境变量。 //内容来自安云网

当我们想在子进程中访问$gaba变量的话,我们可以使用export命令将变量变成环境变量。 //内容来自安云网

//内容来自AnYun.ORG

如上图所示,子进程可以访问环境变量。

//内容来自AnYun.ORG

我们可以使用env命令来查看环境变量: //安云网,anyun.org

//内容来自安云网

当然,聪明的人会这样做: //copyright AnYun.ORG

$ env | grep 'gaba' //内容来自安云网 

//安云网咨询系统

如果你不知道grep和|是什么意思的话,我建议使用搜索引擎查找一下这两条命令的基础用法。

//ANYUN.ORG

0×03 bash函数与环境变量 //ANYUN.ORG

我想,如果你有点编程基础的话再配合前面的几条基础说明,应该能看懂这几句命令的意思:

//ANYUN.ORG

//安云网,anyun.org

建立一个名为x的函数,并将函数x存放在环境变量中,正如你预期的那样,在子shell中仍可执行名为x的函数。

//本文来自安云网

0×04 让字符串变成函数并执行 //安云网咨询系统

好了,我们已经知道了环境变量和函数,那么请看下面这条命令: //ANYUN.ORG

newfunction='() { echo 'shellshockdemo';}' 
//copyright AnYun.ORG

命令是不是没那么复杂?我们继续向刚才那样测试: //ANYUN.ORG

//copyright AnYun.ORG

当我们将这段略复杂的字符串变成环境变量,并重新开启一个新的Bash 进程后,newfunction却可以像函数一样执行了echo 'shellshock'。

//安云网咨询系统

让我们看看环境变量中newfunction的情况: //copyright AnYun.ORG

//本文来自安云网

我们再来试试这条命令: //安云网,anyun.org

$export newfunction='() { echo 'shellshockdemo';}; echo damn! I am vulnerable' //本文来自安云网 

然后打开新的bash进程,神奇的事情发生了,新的进程刚刚启动,就出现了一句回显。: //copyright AnYun.ORG

//安云网,anyun.org

当特殊的字符串变成环境变量后,环境变量又解析成函数,新的Bash进程在启动后又解析了环境变量并可以执行命令。 //内容来自AnYun.ORG

//内容来自AnYun.ORG

我们现在知道了触法并利用破壳漏洞的所需要的几点:

//copyright AnYun.ORG

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

0×05 env命令 //内容来自AnYun.ORG

现在我们再来看一下刚才我们测试”破壳"漏洞的命令: //安云网,anyun.org

env x='() { :;}; echo shellshocked' bash -c "echo test" 

//内容来自AnYun.ORG

但又为什么使用env命令呢?我们查看env的man手册和帮助:

//内容来自AnYun.ORG

//copyright AnYun.ORG

我们用两条命令来理解一下env在这里的用法:

//copyright AnYun.ORG

env newvar=demo 
env newvar=demo bash –c 'echo $newvar'
env x='() { echo accessme;}; echo vulnerable' bash –c 'x' //安云网,anyun.org 

//ANYUN.ORG

//copyright AnYun.ORG

//内容来自AnYun.ORG

也就是说在上图中的echo vulnerable是在新的bash执行后执行的,并且又接着执行了x中的函数体echo accessme 。 //ANYUN.ORG

OK,如果你能理解上图中的命令,那我们就大致理解了那句危险的测试命令的含义。 //本文来自安云网

“破壳”漏洞利用 //copyright AnYun.ORG

下面是一些“破壳”漏洞可能造成的严重后果:

//内容来自AnYun.ORG

Apache充当媒介用CGI组件满足远程访问并调用Bash的env命令 //本文来自安云网

绕过ssh的ForceCommand功能 //内容来自AnYun.ORG

//本文来自安云网

当然,这些内容将会在下篇文章中展开,敬请期待。

//copyright AnYun.ORG

[信息来源:infosecinstitute,有改动,FreeBuf小编嘎巴整理,转载请注明来自FreeBuf.com]

//copyright AnYun.ORG

//copyright AnYun.ORG

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片
相关内容
推荐内容