zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155321 《信息安全系统设计基础》课下作业3

    2017-2018-1 20155321 《信息安全系统设计基础》课下作业3

    课堂练习第五题

    • 因为虚拟机是64位的,所以先输入命令sudo apt-get install libc6-dev-i386为配置32位环境做准备

    • 使用gdb调试器,调出汇编代码

    • 使用命令l查看代码并使用命令b 13在main()处设置断点,后再输入命令run,使用命令disassemble获取汇编代码,输入命令info registers查看当前各寄存器的值

      可见此时主函数的栈基址为0xffffd048,查看其内容为0

    • 输入命令display /i $pc使得每次执行下一条汇编语句时,均打印出当前执行的代码

    • 调用f函数,call指令将下一句要执行的指令的地址入栈

    • 将f函数的基地址入栈,可发现sp寄存器的值发生变化

    • 执行sub语句

    • 执行赋值语句

    • f函数的汇编代码

    • 实参入栈:

    • call指令将下一条指令的地址入栈:

    • 执行系列运算指令


    • pop %ebp指令将栈顶弹到%ebp中,同时%esp增加4字节:

    • ret指令将栈顶弹给%eip:

    • 因为函数f修改了%esp,所以用leave指令恢复。leave指令先将%esp对其到%ebp,然后把栈顶弹给%ebp:

    缓冲区溢出漏洞实验

    • 缓冲区溢出:向缓冲区写入超出预分配固定长度的数据。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。

    • 因实验楼提供的是64位的环境,因此首先要配置32位的环境,输入以下三个命令,为之后的实验做好准备

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

    • 输入命令sudo sysctl -w kernel.randomize_va_space=0关闭系统使用地址空间随机化来随机堆和栈的初始地址

    • 创建另一个shell程序(zsh)代替/bin/bash

    • 编写漏洞程序

    • 编译stack.c程序并设置SET-UID

    • 编写攻击程序

    • 得到shellcode在内存中的地址

    • 计算shellcode的地址并修改exploit.c中x??x??x??x??代码,如下图所示:

    • 运行攻击程序exploit和漏洞程序stack,通过攻击得到root权限

  • 相关阅读:
    Java 常见关键字总结:final、static、this、super!
    URI与URL傻傻分不清楚?
    深入TLS/SSL协议
    排球计分软件功能(记分员计分功能)
    观《罗辑思维之怎样成为一个高手》有感
    个人项目制作(PSP)
    计应152班第3小组之软件初步开发(小组项目)
    本周个人总结
    本周个人总结(软件的初步开发)
    计应152班第3小组之软件初步开发(小组项目)
  • 原文地址:https://www.cnblogs.com/rafell/p/7750032.html
Copyright © 2011-2022 走看看