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
之后设定RHOSTS和TAGRETURL
执行exploit
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 极客实验室!
评论