zoukankan      html  css  js  c++  java
  • 2017-2018-1 20179215 第十一周 ShellShock攻击实验

    《Linux内核原理与设计》第十一周作业 ShellShock攻击实验

    分组:和20179205王雅哲共同完成实验及博客攥写

    实验内容:

     Bash中发现了一个严重漏洞shellshock,该漏洞可用于许多系统,既可以远程也可以在本地触发,本实验通过重现攻击来理解改漏洞。

    实验操作:

    什么是ShellShock?

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

    首先,我们来搭建这个环境:

    下载:
    sudo su 
    $ wget http://labfile.oss.aliyuncs.com/bash-4.1.tar.gz
    
    安装:
    $ 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
    

     安装完成了后,接下来检测是否存在shellshock漏洞,看到输出vulnerable,说明bash有漏洞,最后,让/bin/sh指向/bin/bash,这里的/bin/sh是/bin/bash的符号。了解bash自定义函数,只需要函数名就能够调用该函数。截图如下:

     此时我们来看看ShellShock漏洞的真身:

     调用bash,会输出Hello World, 为什么会出现这样的情况呢?bash读取了环境变量,在定义foo之后直接调用了后面的函数。一旦调用bash,自定义的语句就直接触发。

    攻击set-uid程序:

     Set-UID 是Unix系统中的一个重要的安全机制。当一个Set-UID程序运行的时候,它被假设为具有拥有者的权限。如果程序的拥有者是root,那么任何人运行这个程序时都会获得程序拥有者的权限。Set-UID允许我们做许多很有趣的事情,但是不幸的是,它也是很多坏事情的罪魁祸首。

     参考Set-UID程序漏洞实验,我们来熟悉一下Set-UID程序:

     “passwd”,“chsh”,“su”,和“sudo”命令需要Set-UID机制,如果它们没有这些机制的话,会发生什么,如果你不熟悉这些程序,你可以通话阅读使用手册来熟悉它,如果你拷贝这些命令到自己的目录下,这些程序就不会是Set-UID程序,运行这些拷贝的程序,观察将会发生什么。

     从上面的运行结果可以看出:拷贝到/home/seed下的passwd程序,没有了root权限,这样就没有了修改密码的权限。如下图:

    在linux环境下运行Set-UID 程序,同时描述并且解释你的观察结果:

    原因:因为"passwd", "chsh", "su", and "sudo"属于root,但是普通用户也需要使用到"passwd", "chsh", "su", and "sudo"命令,Set-UID可以使普通用户以root权限来运行这几个指令。

    1、以root方式登录,拷贝/bin/zsh 到/tmp, 同时设置拷贝到tmp目录下的zsh为set-uid root权限,然后以普通用户登录,运行/tmp/zsh。发现可以获得root权限:

     2、代替拷贝/bin/zsh到tmp目录,这次拷贝/bin/bash到/tmp目录,同时设置/tmp目录下的bash为Set-UID root权限,然后以普通用户登录,运行/tmp/bash。发现此时无法获得root权限,这是因为/bin/bash有某种内在的保护机制可以阻止Set-UID机制的滥用:

     现在我们回到本实验中,我们通过攻击Set-UID程序来获得root权限。首先,确保安装了带有漏洞的bash版本,并让/bin/sh 指向/bin/bash。

     在shock.c文件中编写代码,代码如下:

     执行攻击成功,获取到root权限:

     现在我们重复上述步骤,先建一个shock1.c文件,并在shock1文件中,把setuid(geteuid())去掉,再次执行,结果发现,攻击未成功,未获取到root权限:

     对比两次攻击结果,思考是什么导致的攻击结果的改变呢?这就说明如果 real uid 和 effective uid 相同的话,定义在环境变量中的内容在该程序内有效,那样shellshock漏洞就能够被利用了。但是如果两个uid不同的话,环境变量失效,就无法发动攻击了,这可以从bash的源代码中得到印证(variables.c,在308到369行之间),如下图所示:

  • 相关阅读:
    codeforces C. Fixing Typos 解题报告
    codeforces B. The Fibonacci Segment 解题报告
    codeforces B. Color the Fence 解题报告
    codeforces B. Petya and Staircases 解题报告
    codeforces A. Sereja and Bottles 解题报告
    codeforces B. Levko and Permutation 解题报告
    codeforces B.Fence 解题报告
    tmp
    API 设计 POSIX File API
    分布式跟踪的一个流行标准是OpenTracing API,该标准的一个流行实现是Jaeger项目。
  • 原文地址:https://www.cnblogs.com/yl-930/p/8001125.html
Copyright © 2011-2022 走看看