• 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权限,攻击成功。

  • 相关阅读:
    C#多态的实现
    C#虚方法
    stm32HAL库中串口部分各个传输和接收函数分析
    ASC字符串取模网址
    STM32F1高级定时器做普通PWM输出配置(例TIM1)
    maven 插件说明
    mac 离线安装yarn
    Tomcat 远程调试
    杀死 tomcat 进程的脚本
    mysql 安装
  • 原文地址:https://www.cnblogs.com/besti-20199303/p/11944597.html
Copyright © 2020-2023  润新知