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


    缓冲区溢出漏洞实验

    安装一些用于编译C程序的32位软件包
    sudo apt-get install -y lib32z1 libc6-dev-i386
    sudo apt-get install -y lib32readline-gplv2-dev

    关闭地址空间随机化
    ubuntu和其他一些了Linux系统中,使用地址空间随机化来随机堆(heap)和栈(stack)的初始地址,这使得猜测准确的内存地址变得十分困难。而猜测内存地址是缓冲区溢出攻击的关键,因此本次实验中,我们要使用命令关闭这一功能:
    sudo sysctl -w kernel.randomize_va_space=0

    设置zsh程序
    为了进一步防范缓冲区溢出攻击及其他利用shell程序的攻击,许多shell程序再被调用时自动放弃他们的特权。因此,即使能欺骗一个SET-UID程序调用一个shell,也不能在这个shell中保持root权限,这个防护措施在/bin/bash中实现。
    Linux系统中,/bin/sh实际指向/bin/bash或/bin/dash的一个符号链接(软链接)。为了重现这一防护措施被实现之前的情形,我们使用另一个shell程序(zsh)代替/bin/bash。下面指令描述如何设置zsh程序:

    在/tmp目录下新建一个stack.c文件并输入一下内容

    在/tmp目录下新建一个exploit.c文件,输入如下内容:

    对于exploit.c文件中,x??x??x??x??处需要添加上shellcode保存在内存中的地址,因为发生溢出后这个位置刚好可以覆盖返回地址。而strcpy(buffer +100,shellcode)告诉我们shellcode保存在buffer + 100的位置。

    启动gdb,寻找str的内存位置:

    读取esp寄存器的值,此即为要攻击的内存地址,而后展开攻击

    可以发现获取到了root权限,攻击成功。

  • 相关阅读:
    编写一个函数将一个十六进制数的字符串参数转换成整数返回?
    设置一段文字的大小为6px?
    写clone()方法时,通常都有一行代码,是什么?
    abstract class和interface有什么区别?
    JDBC中的Statement 和PreparedStatement的区别?
    什么是MVC模式?   
    Struts2的Action中获取request对象的几种方式?
    Struts2的功能扩展点有哪些?
    说说&和&&的区别?
    Struts2里面有什么隐式对象?
  • 原文地址:https://www.cnblogs.com/besti-20199303/p/11944597.html
Copyright © 2020-2023  润新知