avatar

Bash破壳漏洞(CVE-2014-6271)

Bash破壳漏洞(CVE-2014-6271)

产生原因

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

在补丁中主要进行了参数的合法性过滤,补丁程序在/builtins/evalstring.c的parse_and_execute函数中进行了输入的command进行了合法性的边界检测,将代码注入的可能性排除。在排除中主要用到了flags的两次判断和command的一次类型匹配,为了能够flags判断准确,在补丁中预先定义了SEVAL_FUNCDEF、SEVAL_ONECMD两个标识作为判断依据。此漏洞进行的补丁更新有三处,主要进行输入的command进行过滤作用。

/builtins/common.h
#define SEVAL_FUNCDEF  0x080                 /* onlyallow function definitions */
#define SEVAL_ONECMD  0x100                 /* onlyallow a single command
*//builtins/evalstring.c
 if((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)
                   {
                   internal_warning("%s: ignoring function definition attempt", from_file);
                   should_jump_to_top_level= 0;
                   last_result= last_command_exit_value = EX_BADUSAGE;
                     break;
                   }
/builtins/evalstring.c
if (flags & SEVAL_ONECMD)
                   break;

环境

靶机 192.168.160
框架 msf5
目标地址 /cgi-bin/status

复现测试

首先找到合适的exp

upload successful

之后设定RHOSTS和TAGRETURL

upload successful

执行exploit

upload successful

文章作者: echo.
文章链接: http://blog.wangyuyang.top/2020/03/17/CVE-2014-6271/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 极客实验室

评论