破壳漏洞(CVE-2014-6271)分析

摘要:
受影响的版本:GNUBash4.3及更早版本。影响范围:主流Linux和Mac OS X操作系统,与bash交互的各种应用程序,如HTTP、FTP、DHCP等。漏洞原理和POC验证:1.bash 1.1本地变量的基本知识此变量在另一个bash进程中无效,因此它是一个本地变量。1.2全局变量导出命令可以设置全局变量,env命令也具有此功能。1.3本地函数foo(){echo“111”;}通力,可以判断为局部函数

受影响版本:GNU Bash 4.3及之前版本

影响范围:主流的Linux和MacOSX操作系统,与bash交互的各种应用程序,如HTTP,FTP,DHCP等等。

漏洞原理及POC验证

1.bash基础知识

1.1局部变量

破壳漏洞(CVE-2014-6271)分析第1张

此变量在另一bash进程中无效,因此为局部变量。

1.2全局变量

破壳漏洞(CVE-2014-6271)分析第2张

export命令可设置全局变量,env命令也有此功能。

 1.3局部函数

foo(){echo "111";}

 破壳漏洞(CVE-2014-6271)分析第3张

同里,可判断为局部函数。

1.4全局函数

破壳漏洞(CVE-2014-6271)分析第4张

破壳漏洞(CVE-2014-6271)分析第5张

2.目前bash使用的环境变量是通过函数名称来调用的,导致漏洞出问题的是 以“(){”开头定义的环境变量在env中解析为函数后,bash执行没有退出,而是继续解析后面的shell命令。当然,核心原因是在输入过程中没有严格地限制边界,也没有做出合法的参数判断。

 2.1POC验证

env x='() { :;}; echo vulnerable' ./bash -c "echo this is a test"

 破壳漏洞(CVE-2014-6271)分析第6张

POC中,env解析(){为函数,继续解析后面的代码,经过尝试,必须要有./bash -c "echo this is a test",否则前面的echo vulnerable不会执行。

2.2结合bash代码做POC分析

2.2.1POC中定义变量x为() { :;}; echo vulnerable,它会变成函数,于bash中的函数定义有关。

bash中函数定义为

function function_name() {
body;
}

 因此,当bash解析发现(){时,就认为它是函数。

 2.2.2bash解析函数后,会继续执行后面的代码,原因在于parse_and_execute函数。
builtins/evalstring.c的parse_and_execute函数中,

else if (command = global_command)
{
struct fd_bitmap *bitmap;

... 

 首先,输入的命令代码走这条分支,这条分支并没有对命令的类型进行判断,从而导致bash能继续解析执行后面的代码。

补丁

第一处,在builtins/evalstring.c的parse_and_execute函数中,

else if (command = global_command)
{
struct fd_bitmap *bitmap;

... 

加入

if ((flags & SEVAL_FUNCDEF)  && command->type != cm_function_def)

第二处,在/builtins/common.h加入

#define SEVAL_FUNCDEF  0x080                 /* only allow function definitions */
#define SEVAL_ONECMD  0x100                 /* only allow a single command

第三处,在/builtins/evalstring.c加入

if (flags & SEVAL_ONECMD)
                   break;

它们主要对命令代码的函数属性和命令个数做了限制。如果是这个命令没有创建函数的功能,那它必须是一个命令【即命令中间不能存在;】。这有效的遏制了POC的攻击。

免责声明:文章转载自《破壳漏洞(CVE-2014-6271)分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ELM学习(一)vue图表组件使用,组件文档echarts下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

20199305 2019-2020-2 《网络攻防实践》第七周作业

《网络攻防实践》第七周作业 一、前言 问题 回答 作业属于 https://edu.cnblogs.com/campus/besti/19attackdefense 作业要求 https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10553 课程目标 学习教材第七章,完成...

CVE-2017-12617 Tomcat 远程代码执行

0×00前情提要 Apache Tomcat团队10月3日宣布,如果配置了默认servlet,则在9.0.1(Beta),8.5.23,8.0.47和7.0.82之前的所有Tomcat版本都包含所有操作系统上的潜在危险的远程执行代码(RCE)漏洞,CVE-2017-12617:远程代码执行漏洞。 只需参数readonly设置为false或者使用参数read...

Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)

0x00 漏洞描述Windows系列服务器于2019年5月15号,被爆出高危漏洞,该漏洞影响范围较广如:windows2003、windows2008、windows2008 R2、windows xp系统都会遭到攻击,该服务器漏洞利用方式是通过远程桌面端口3389,RDP协议进行攻击的。这个漏洞是今年来说危害严重性最大的漏洞,跟之前的勒索,永恒之蓝病毒差...

Logback 也爆雷了,惊爆了。。。

Logback 也爆雷了 Log4j2 漏洞最新进展: Log4j 2.3.1 发布!又是什么鬼?? Log4j2 核弹级漏洞刚结束没几天,Logback 其实也爆雷了,这你能信?? 栈长在上篇文章提到,因 Log4j2 漏洞的反复无常,导致某些公司已经切换到 Logback 了,如果这也是你们公司的决定,请在文章下面评论区留言。 可令栈长万万想不到的是,...

win-sudo插件解决Git bash 执行脚本报错问题 bash: sudo: command not found

Windows git bash 默认没有sudo命令,可以添加win-sudo插件实现该功能 curl -s https://raw.githubusercontent.com/imachug/win-sudo/master/install.sh | sh 如果上面的命令没有用,可以复制https://raw.githubusercontent.com/...

致远OA ajaxAction formulaManager 文件上传漏洞

​ 致远OA ajaxAction formulaManager 文件上传漏洞 一、漏洞描述 致远OA是一套办公协同软件。近日,阿里云应急响应中心监控到致远OA ajaxAction 文件上传漏洞利用代码披露。由于致远OA旧版本某些ajax接口存在未授权访问,攻击者通过构造恶意请求,可在无需登录的情况下上传恶意脚本文件,从而控制服务器。 ​ 二、影响版本...