• 2020-2021-1 20209309《Linux内核原理与分析》第十一周作业


    作业信息

    这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析>
    这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第十一周作业>
    这个作业的目标 <Linux安全实验>
    作业正文 本文连接

    实验

    初始设置

    关闭地址空间随机化设置:

    /bin/sh 实际是指向 /bin/bash 或 /bin/dash 的一个符号链接,使用另一个 shell 程序(zsh)代替 /bin/sh,来指向/bin/bash 或 /bin/dash。

    由于虚拟机本身是32位系统,所以不需要再使用Linux32来进入32位环境。

    shellcode

    观察相应的代码,并生成汇编版本:

    对应的汇编版本为:
    x31xc0x50x68"//sh"x68"/bin"x89xe3x50x53x89xe1x99xb0x0bxcdx80

    漏洞程序

    在/tmp目录下建立stack.c文件:

    通过代码可以知道,程序会读取一个名为“badfile”的文件,并将文件内容装入“buffer”。
    编译该程序,并设置 SET-UID。

    GCC编译器有一种栈保护机制来阻止缓冲区溢出,所以我们在编译代码时需要用 –fno-stack-protector 关闭这种机制。 而 -z execstack 用于允许执行栈。

    攻击程序

    在 /tmp 目录下新建一个 exploit.c 文件:
    目的是攻击刚才的漏洞程序,并通过攻击获得 root 权限。
    注意代码中,x??x??x??x?? 处需要添上 shellcode 保存在内存中的地址,因为发生溢出后这个位置刚好可以覆盖返回地址。而 strcpy(buffer+100,shellcode); 这一句又告诉我们,shellcode 保存在 buffer + 100 的位置。

    要得到shellcode在内存中的地址,输入命令进入gdb调试:

    esp中就是str的起始地址,所以我们在地址0x080484ee处设置断点:

    之后运行调试,并且观察相应的esp寄存器中的内容。
    根据语句 strcpy(buffer + 100,shellcode); 
    计算 shellcode 地址为 0xbfffee30 + 0x64 = 0xbfffee94.

    现在修改 exploit.c 文件,将 x??x??x??x?? 修改为计算的结果 x94xeexffxbf,注意顺序是反的。

    编译 exploit.c 程序

    攻击结果

    出现错误:

    修改相应的栈内存分配:

    实现提权。

  • 相关阅读:
    python练习六十二:文件处理,往文件中所有添加指定的前缀
    python练习六十一:文件处理,读取文件内容
    使用广度优先搜素查找路径
    不同路径 II
    使用深度优先搜索查找路径
    不同路径
    深度优先搜索
    旋转链表
    java 迭代
    表示图的数据类型
  • 原文地址:https://www.cnblogs.com/yanzs/p/14163557.html
Copyright © 2020-2023  润新知