破壳漏洞(CVE-2014-6271)分析
受影响版本:GNU Bash 4.3及之前版本
影响范围:主流的Linux和MacOSX操作系统,与bash交互的各种应用程序,如HTTP,FTP,DHCP等等。
漏洞原理及POC验证:
1.bash基础知识
1.1局部变量

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

export命令可设置全局变量,env命令也有此功能。
1.3局部函数
foo(){echo "111";}

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


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

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)分析的更多相关文章
- Shellshock 破壳漏洞 Writeup
破壳漏洞 CVE编号:CVE-2014-6271 题目URL:http://www.whalwl.site:8029/ 提示:flag在服务器根目录 ShellShock (CVE-2014-6271 ...
- 破壳漏洞利用payload—shellshock in the wild
FireEye关于破壳漏洞(shellshock)在现实中的利用有一篇文章: shellshock in the wild 原文较长,进行了对CGI利用的详细分析,笔者比较感兴趣的是Shellshoc ...
- 对CVE-2014-6271 [破壳漏洞] 的一次不太深入的跟踪
@firtst:有些事,该你遇到的始终会遇到!2013年,Struts2远程代码执行漏洞闹的满城风雨时,当时还对此一无所知:2014年4月,HeartBleed掀起波涛汹涌时,较快对此予以关注,晚上跑 ...
- 应用安全-软件安全-漏洞CVE整理
jira ssrf CVE-2019-8451 url = url + '/plugins/servlet/gadgets/makeRequest?url=' + host + '@www.baidu ...
- CVE-2013-2551漏洞成因与利用分析(ISCC2014 PWN6)
CVE-2013-2551漏洞成因与利用分析 1. 简介 VUPEN在Pwn2Own2013上利用此漏洞攻破了Win8+IE10,5月22日VUPEN在其博客上公布了漏洞的细节.它是一个ORG数组整数 ...
- CVE-2014-6271 Shellshock 破壳漏洞 复现
补坑. 什么是shellshock ShellShock是一个BashShell漏洞(据说不仅仅是Bash,其他shell也可能有这个漏洞). 一般情况来说,系统里面的Shell是有严格的权限控制的, ...
- 【Android漏洞复现】StrandHogg漏洞复现及原理分析_Android系统上的维京海盗
文章作者MG1937 CNBLOG博客:ALDYS4 QQ:3496925334 0x00 StrandHogg漏洞详情 StrandHogg漏洞 CVE编号:暂无 [漏洞危害] 近日,Android ...
- CVE-2014-0322漏洞成因与利用分析
CVE-2014-0322漏洞成因与利用分析 1. 简介 此漏洞是UAF(Use After Free)类漏洞,即引用了已经释放的内存,对指定内存处的值进行了加1.其特点在于攻击者结合flash实现了 ...
- CVE-2013-3897漏洞成因与利用分析
CVE-2013-3897漏洞成因与利用分析 1. 简介 此漏洞是UAF(Use After Free)类漏洞,即引用了已经释放的内存.攻击者可以利用此类漏洞实现远程代码执行.UAF漏洞的根源源于对对 ...
随机推荐
- linux下显示dd命令的进度
sudo dd if=/dev/zero of=/tmp/zero.img status=progresslinux下显示dd命令的进度:dd if=/dev/zero of=/tmp/zero.im ...
- 必看!2020最新黑马JAVA 学习路线
https://www.fang1688.cn/2020/08/24/%e5%bf%85%e7%9c%8b%ef%bc%81java-%e5%ad%a6%e4%b9%a0%e8%b7%af%e7%ba ...
- jdk8的下载、安装、配置
jdk官方网址:https://www.oracle.com/java/technologies/javase-downloads.html 小编微信和公众号(很高兴能与各位交流学习) 以下是具体步骤 ...
- Qt 绘图(QBitmap,QPixmap,QImage,QPicture)
QPainter绘图绘图设备(QPixmap,QImage,QBitmap,QPicture) 重写绘图事件,虚函数 如果窗口绘图,必须放在绘图事件里实现 绘图事件内部自动调用,窗口需要重绘的时候,状 ...
- 深入理解C++中的new/delete和malloc/free动态内存管理
malloc/free和new/delete的区别 malloc/free是C/C++标准库的函数:new/delete是C++操作符. malloc/free只是动态分配内存空间/释放空间:new/ ...
- 深入理解计算机系统 Start && 第一章要点
对此书已经慕名已久了,抽空看了第1,2,3,5章,其他章节等有空闲继续看吧. 我的许多博客是给自己快速复习使用的,比如此读书后感,你可以根据我下面的建议读完原书几章再回来复习一下(或许那时候就没必要回 ...
- Codeforces Round #580 (Div. 2)-D. Shortest Cycle(思维建图+dfs找最小环)
You are given nn integer numbers a1,a2,…,ana1,a2,…,an. Consider graph on nn nodes, in which nodes ii ...
- vue中使用柱状图
子组件 <template> <div> <div id="myChart" :style="{width: '400px', height ...
- 20190917-01VI/VIM编辑器 000 002
VI是Unix 操作系统和类Unix操作系统中最通用的文本编辑器. VIM编辑器是从VI发展出来的一个性能更强大的文本编辑器.可以主动的以字体颜色便被语法的正确性,方便程序设计.VIM与VI编辑器完全 ...
- Fabric1.4 架构和原理
#1.Fabric总体架构Fabric架构主要包括三个模块:会员(Membership),区块链(Blockchan)和链码(chaincode). 1.1成员服务 包含下列组件:注册.身份认证管理及 ...