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


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

    分组: 和20179215袁琳完成实验及博客攥写

    实验内容:

      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 程序,同时描述并且解释你的观察结果

    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。hack过程如下:

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

    执行一下,结果攻击成功:

    现在我们重复上述步骤,先建一个shock1.c文件,并在shock1文件中,把setuid(geteuid())去掉,shock1.c文件代码如下:

    再次执行,结果发现,攻击失败:

      对比两次攻击结果,思考是什么导致的攻击结果的改变呢?我们查看一下代码,就是上述那一行判断逻辑导致了两者的不同,primode即私有模式,要求real uid 与 effective uid保持一致。在shock.c文件中,代码setuid(geteuid())就是使real uid=effective uid,两者保持一致,则g;攻击成功。shock1.c中,修改代码,把setuid(geteuid())一行去掉,则不能保持real uid 与 effective uid的一致,因此攻击失败。

  • 相关阅读:
    Flask第二篇——服务器相关
    Flask第一篇——URL详解
    Appium 定位方法例子(4)
    selenium 上传文件方法补充——SendKeys、win32gui
    Appium+python (3) 异常处理
    Appium+python (3) 元素定位(1)
    "http://127.0.0.1:4723/wd/hub"的解释
    Appium + Python App自动化(2)第一个脚本
    Appium+python(1)简单的介绍环境搭建
    用fiddler设置手机代理
  • 原文地址:https://www.cnblogs.com/wyz-1995/p/7999727.html
Copyright © 2020-2023  润新知