zoukankan      html  css  js  c++  java
  • 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权限,攻击成功。

  • 相关阅读:
    linux学习之用户的切换
    Skyline桌面二次开发之路径漫游(C#)
    AppDomain.CurrentDomain.BaseDirectory项目目录相关操作
    IoC模式(依赖、依赖倒置、依赖注入、控制反转)
    .net core 2.1-----Sql Server数据库初体验
    WPF成长之路------翻转动画
    C#之通过图片地址下载图片
    g'g'gggg
    Java中的多态
    接口
  • 原文地址:https://www.cnblogs.com/besti-20199303/p/11944597.html
Copyright © 2011-2022 走看看