zoukankan      html  css  js  c++  java
  • 20199306《Linux内核原理与分析》第十二周作业

    Return-to-libc 攻击实验

    基础知识

    Return-to-libc攻击是一种特殊的缓冲区溢出攻击,通常用于攻击有“栈不可执行”保护措施的目标系统。
    缓冲区溢出的常用攻击方法是用 shellcode 的地址来覆盖漏洞程序的返回地址,使得漏洞程序去执行存放在栈中 shellcode。为了阻止这种类型的攻击,一些操作系统使得系统管理员具有使栈不可执行的能力。这样的话,一旦程序执行存放在栈中的 shellcode 就会崩溃,从而阻止了攻击。
    不幸的是上面的保护方式并不是完全有效的,现在存在一种缓冲区溢出的变体攻击,叫做 return-to-libc 攻击。这种攻击不需要一个栈可以执行,甚至不需要一个 shellcode。取而代之的是我们让漏洞程序跳转到现存的代码(比如已经载入内存的 libc 库中的 system()函数等)来实现我们的攻击。

    实验步骤

    1.实验准备:输入命令安装一些用于编译 32 位 C 程序的东西:

    sudo apt-get update
    sudo apt-get install lib32z1 libc6-dev-i386
    sudo apt-get install lib32readline-gplv2-dev
    

    输入命令“linux32”进入 32 位 linux 环境。输入“/bin/bash”使用 bash:

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

    sudo sysctl -w kernel.randomize_va_space=0
    

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

    sudo su
    cd /bin
    rm sh
    ln -s zsh sh
    exit
    

    为了防止缓冲区溢出攻击,最近版本的 gcc 编译器默认将程序编译设置为栈不可执行,而你可以在编译的时候手动设置是否使栈不可执行:

    gcc -z execstack -o test test.c    #栈可执行
    gcc -z noexecstack -o test test.c  #栈不可执行
    

    本次实验的目的,就是展示这个“栈不可执行”的保护措施并不是完全有效,所以我们使用“-z noexecstack”,或者不手动指定而使用编译器的默认设置。

    3.漏洞程序
    把以下代码保存为“retlib.c”文件,保存到 /tmp 目录下。代码如下:

    编译该程序,并设置 SET-UID。命令如下:

    我们还需要用到一个读取环境变量的程序:

    4.攻击程序
    把以下代码保存为“exploit.c”文件,保存到 /tmp 目录下。代码如下:

    5.获取内存地址
    用刚才的 getenvaddr 程序获得 BIN_SH 地址:

    gdb 获得 system 和 exit 地址:

    修改 exploit.c 文件,填上刚才找到的内存地址:

    6.攻击
    先运行攻击程序 exploit,再运行漏洞程序 retlib,可见攻击成功,获得了 root 权限:

  • 相关阅读:
    【C#进阶系列】06 类型和成员基础
    纪中5日T1 1564. 旅游
    纪中17日T1 2321. 方程
    纪中17日T2 2322. capacitor
    纪中10日T1 2313. 动态仙人掌
    纪中14日听课小结 图论 最短路 二分图 差分约束
    一个抓猫的游戏 消遣GAME 持续更新中!
    洛谷P1464 Function  HDU P1579 Function Run Fun
    洛谷P1976 鸡蛋饼
    纪中12日T1 2307. 选择
  • 原文地址:https://www.cnblogs.com/Huyiming/p/11981286.html
Copyright © 2011-2022 走看看