• 破壳漏洞(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的攻击。

  • 相关阅读:
    LeetCode 88. Merge Sorted Array
    LeetCode 75. Sort Colors
    LeetCode 581. Shortest Unsorted Continuous Subarray
    LeetCode 20. Valid Parentheses
    LeetCode 53. Maximum Subarray
    LeetCode 461. Hamming Distance
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 976. Largest Perimeter Triangle
    LeetCode 1295. Find Numbers with Even Number of Digits
    如何自学并且系统学习计算机网络?(知乎问答)
  • 原文地址:https://www.cnblogs.com/HYWZ36/p/10878813.html
Copyright © 2020-2023  润新知