zoukankan      html  css  js  c++  java
  • 20199321 《Linux内核原理与分析》第十二周作业

    Shellshock攻击实验

    Shellshock,又称Bashdoor,是在Unix中广泛使用的Bash shell中的一个安全漏洞,首次于2014年9月24日公开。许多互联网守护进程,如网页服务器,使用bash来处理某些命令,从而允许攻击者在易受攻击的Bash版本上执行任意代码。这可使攻击者在未授权的情况下访问计算机系统。

    环境搭建

    以root权限安装4.1版bash(4.2版本以上的漏洞已经被堵上了)

    $ tar xf bash-4.1.tar.gz
    $ cd bash-4.1
    $ ./configure 
    $ make && make install
    

    • 链接
    $ rm /bin/bash
    $ ln -s /usr/local/bin/bash /bin/bash
    

    漏洞检查

    输出vulnerable,说明bash有漏洞。

    攻击Set-UID程序

    • 在 /home/shiyanlou 目录下新建一个 shock.c 文件:
    #include <stdio.h>
    void main()
    {
        setuid(geteuid()); // make real uid = effective uid.
        system("/bin/ls -l");
    }
    
    

    我们注意到这里使用了setuid(geteuid()) 来使real uid = effective uid,这在Set-UID程序中不是普遍现象,但它确实有时会发生。

    • 编译这段代码,并设置其为Set-UID程序,保证它的所有者是root。

      • system()函数将调用"/bin/sh -c" 来运行指定的命令, 这也意味着/bin/bash 会被调用
      • 当一个Set-UID程序运行的时候,它被假设为具有拥有者的权限。如果程序的拥有者是root,那么任何人运行这个程序时都会获得程序拥有者的权限。

    • 进行攻击

    • 去掉setuid(geteuid()) 语句,再攻击

      攻击失败。这就说明如果 real uid 和 effective uid 相同的话,定义在环境变量中的内容在该程序内有效,那样shellshock漏洞就能够被利用了。但是如果两个 uid 不同的话,环境变量失效,就无法发动攻击了,这可以从 bash的源代码中得到印证:

    void initialize_shell_variables(){
    // 循环遍历所有环境变量
    for (string_index = 0; string = env[string_index++]; ) {
         /*...*/
         /* 如果有export过的函数, 在这里定义 */
         /* 无法导入在特权模式下(root下)定义的函数 */
         if (privmode == 0 && read_but_dont_execute == 0 &&
               STREQN (“() {“, string, 4)) {
               [...]
               // 这里是shellshock发生的地方
               // 传递函数定义 + 运行额外的指令
               parse_and_execute (temp_string, name,
                    SEVAL_NONINT|SEVAL_NOHIST);
    [...]
    } }
    

    primode即私有模式,要求real uid 与 effective uid保持一致。

    实验总结

    Shellshock的原理是利用了Bash在导入环境变量函数时候的漏洞,启动Bash的时候,它不但会导入这个函数,而且也会把函数定义后面的命令执行。在有些CGI脚本的设计中,数据是通过环境变量来传递的,这样就给了数据提供者利用Shellshock漏洞的机会。如何修复ShellShock漏洞:禁用CGI(但是可能会导致web服务功能出问题);完善权限管理机制,在设置环境变量的之前先做好检测,确保环境变量设置语句里面不会有一些越权的行为。

  • 相关阅读:
    Android中库项目、jar包等的使用方法
    rman 使用catalog备份的演示
    好端端的项目重新运行的时候却不行了!!!已解决
    动物:河蚌
    动物:田螺
    动物-鱼:鳖
    动物-鱼:鳝鱼
    动物-鱼:柳根鱼
    动物-鱼:泥鳅
    动物-鱼:刺鳅
  • 原文地址:https://www.cnblogs.com/20199321zjy/p/11981659.html
Copyright © 2011-2022 走看看