热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

20172018120155321《信息安全系统设计基础》课下作业3

2017-2018-120155321《信息安全系统设计基础》课下作业3课堂练习第五题因为虚拟机是64位的,所以先输入命令sudoapt-getinstalllibc

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

课堂练习第五题

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

  • 使用gdb调试器,调出汇编代码
    1071532-20171029113439336-78603329.png

  • 使用命令l查看代码并使用命令b 13在main()处设置断点,后再输入命令run,使用命令disassemble获取汇编代码,输入命令info registers查看当前各寄存器的值
    1071532-20171029114506851-1159391589.png
    可见此时主函数的栈基址为0xffffd048,查看其内容为0

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

  • 调用f函数,call指令将下一句要执行的指令的地址入栈
    1071532-20171029124545992-1483174804.png

  • 将f函数的基地址入栈,可发现sp寄存器的值发生变化
    1071532-20171029124859039-942232265.png

  • 执行sub语句
    1071532-20171029125143726-957327153.png

  • 执行赋值语句
    1071532-20171029125612305-64144723.png

  • f函数的汇编代码
    1071532-20171029125858898-1022501460.png

  • 实参入栈:
    1071532-20171029130114695-2134140470.png

  • call指令将下一条指令的地址入栈:
    1071532-20171029130315617-69840615.png

  • 执行系列运算指令
    1071532-20171029130441351-1987603613.png
    1071532-20171029130558289-1733597034.png
    1071532-20171029131148461-2107199269.png

  • pop %ebp指令将栈顶弹到%ebp中,同时%esp增加4字节:
    1071532-20171029130913258-2048408787.png
    1071532-20171029131318445-848512094.png

  • ret指令将栈顶弹给%eip:
    1071532-20171029131916133-1498391773.png

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

1071532-20171029143905711-56062973.png

缓冲区溢出漏洞实验

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

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

sudo apt-get updatesudo apt-get install lib32z1 libc6-dev-i386sudo apt-get install lib32readline-gplv2-dev

1071532-20171029110033976-352154955.png

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

  • 创建另一个shell程序(zsh)代替/bin/bash
    1071532-20171029110803226-1830562147.png

  • 编写漏洞程序
    1071532-20171029110938648-1672796095.png

  • 编译stack.c程序并设置SET-UID
    1071532-20171029111215570-33537286.png

  • 编写攻击程序

  • 得到shellcode在内存中的地址
    1071532-20171029111644476-1102952324.png

  • 计算shellcode的地址并修改exploit.c中\x??\x??\x??\x??代码,如下图所示:
    1071532-20171029111745242-27407413.png
    1071532-20171029111809164-1948293924.png

  • 运行攻击程序exploit和漏洞程序stack,通过攻击得到root权限
    1071532-20171029111829351-1523381082.png


转载于:https://www.cnblogs.com/rafell/p/7750032.html


推荐阅读
  • 最近用python写了一个小程序,想发布出去让人试用又不想暴露源码,搜索了一下发现将py文件编译成pyd文件就能达到目的。转换过程很简单,但是在调用pyd文件并且打包为单个exe文 ... [详细]
  • Java的核心库提供了大量的现成的类供我们使用。本节我们介绍几个常用的工具类。Math顾名思义,Math类就是用来进行数学计算的,它提供了大量的静态 ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Linux提权之suid篇
    Linux提权之suid篇不知攻,焉知防一个在安服路上摸索的大三生,记录平时学习笔记suid前言:1.只有可以执行的二进制程序文件才 ... [详细]
  • 编译linux搭建vs2015,使用Vs2015开发linux(centos7)程序
    1.首先下载vs2015withupdate32.然后下载VisualCforLinuxDevelopment3.在centos7上yuminstallopenssh-server ... [详细]
  • 安全3AAuthentication:认证Authorzation:授权Accouting|Audition:审计用户管理用户:UID:0,不一定是root,root的uid非0时 ... [详细]
  • Ubuntu16.0464位安装armlinuxgcc交叉编译器以及samba服务器
    交叉编译器是嵌入式开发的必要工具,但是由于目前大多数人使用64位ubuntu,在照着很多教程做的时候,就会失败,失败原因是64位ubuntu需要额外安装32位的兼容包。以arm-l ... [详细]
  • npmimportuse这里我记录一下,视频地址和封面地址均引用的是服务器端得,本地的视频和图片 ... [详细]
  • Ubuntu 16.04 安装opencv方法 Python接口
    方法:利用pip安装opencv-python1.先把ubuntu中python版本默认设置为:python3echoaliaspythonpyth ... [详细]
  • 实验七、绕过ASLR 第二部分
    7.1实验环境VM配置:Ubuntu12.04(x86)7.2实验原理什么是爆破?使用爆破技巧,来绕过共享库地址随机化。7.3实验过程7. ... [详细]
  • diskmark使用教程
    首先说明一下软件各个参数的意义。1~9测试次数;50MB~4000MB测试规模;C,D,E,F选择测试对象;ALL测试以下所有;第一行代表你硬盘的读写速度。第二行代表你硬盘4K文件 ... [详细]
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • [VScode教程] VSCode 任务系统配置 – 分组和结果显示
    VSCode任务系统配置–分组和结果显示,来学习一下任务系统配置里的其他属性 ... [详细]
  • 如何监控 Linux 服务器状态?,分享
    Linux服务器我们天天打交道,特别是Linux工程师更是如此。为了保证服务器的安全与性能,我们经常需要监控服务器的一些状态,以保证工作能顺利开展。本文介绍的几个命令,不仅仅适用于 ... [详细]
author-avatar
缘无音iy
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有