缓冲区溢出漏洞实践

由于实验楼提供的是64位操作系统,而本次实验为了方便观察汇编语句,采用32位操作系统,所以先按照要求进行一些必要的准备

先按顺序输入下面的三个命令安装32位操作系统

安装好之后就切换到32位操作系统中

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

linux系统中,/bin/sh实际是指向/bin/bash或/bin/dash的一个符号链接。为了重现这一防护措施被实现之前的情形,我们使用另一个shell程序(zsh)代替/bin/bash。下面的指令描述了如何设置zsh程序:

shellcode

一般情况下,缓冲区溢出会造成程序崩溃,在程序中,溢出的数据覆盖了返回地址。而如果覆盖返回地址的数据是另一个地址,那么程序就会跳转到该地址,如果该地址存放的是一段精心设计的代码用于实现其他功能,这段代码就是shellcode。

把以下代码保存为“stack.c”文件,保存到 /tmp 目录下。代码如下:

通过代码可以知道,程序会读取一个名为“badfile”的文件,并将文件内容装入“buffer”。

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

GCC编译器有一种栈保护机制来阻止缓冲区溢出,所以我们在编译代码时需要用 –fno-stack-protector 关闭这种机制。

而 -z execstack 用于允许执行栈。

我们的目的是攻击刚才的漏洞程序,并通过攻击获得root权限。

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

注意上面的代码,“\x??\x??\x??\x??”处需要添上shellcode保存在内存中的地址,因为发生溢出后这个位置刚好可以覆盖返回地址。

而 strcpy(buffer+100,shellcode); 这一句又告诉我们,shellcode保存在 buffer+100 的位置。

现在我们要得到shellcode在内存中的地址,输入命令:

继续输入命令

得到下面的界面

其中,第五行的esp中就是str的起始地址

我们在第六行的地址处设置断点

根据语句 strcpy(buffer+100,shellcode); 我们计算shellcode的地址为 0xffffd020(十六进制)+100(十进制)=0xffffd084(十六进制)

现在修改exploit.c文件!将 \x??\x??\x??\x?? 修改为 \x84\xd0\xff\xff

然后,编译exploit.c程序:

先运行攻击程序exploit,再运行漏洞程序stack,观察结果:

可以看到,攻击成功

转载于:https://www.cnblogs.com/zehaowang/p/6820303.html

《网络攻防》第十周学习总结相关推荐

  1. 网络攻防 第三周学习总结

    教材学习内容总结 网络攻防第三章主要介绍了网络信息收集技术,对目标入侵之前会从目标的名称和域名入手,包括IP地址范围.详细的注册信息.DNS服务器位置.电话号段.网络或安全管理员及联系方式等.收集的方 ...

  2. 20169220 网络攻防实践 第二周学习总结

    20169220 赵京鸣 2016/2017-2 第二周学习总结 进度:1.教材第1-2章/12章 2.Kali教学视频1-5/36 3.查找2个安全工具/5 4.国内外黑客.电影书籍了解 5.lin ...

  3. 20155230 2016-2017-2 《Java程序设计》第十周学习总结

    20155230 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程:就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发 ...

  4. # 20155337 2016-2017-2 《Java程序设计》第十周学习总结

    20155337 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程 •网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就 ...

  5. 20145302张薇《Java程序设计》第十周学习总结

    20145302 <Java程序设计>第十周学习总结 客户端和服务器端功能 客户端程序功能列表: 接收用户控制台输入 判断输入内容是否合法 按照协议格式发送数据 根据服务器端的反馈给出相应 ...

  6. 20155305乔磊2016-2017-2《Java程序设计》第十周学习总结

    20155305乔磊2016-2017-2<Java程序设计>第十周学习总结 教材学习内容总结 Java的网络编程 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. ...

  7. 20145324 《信息安全系统设计基础》第十周学习总结

    20145324 <信息安全系统设计基础>第十周学习总结 学习内容总结 who •who能做什么:显示目前登入系统的用户信息 •man who •使用一下 ①who ②who am i ③ ...

  8. 201521123038 《Java程序设计》 第十周学习总结

    201521123038 <Java程序设计> 第十周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题 ...

  9. 20172313 2017-2018-2 《程序设计与数据结构》第十周学习总结

    20172313 2017-2018-2 <程序设计与数据结构>第十周学习总结 教材学习内容总结 了解集合的同构和异构:同构集合保存类型全部相同的对象,异构集合可以保存各种类型的对象. 集 ...

  10. 第十周学习总结--助教

    第十周学习总结 一.   学习内容总结 这周的题目有四道题,前面三题都不难,最后一题用模拟除法去写,还是思考了很长的时间. 二.   学习和作业中的问题和解决过程 1.没有思路,无从下手 解决:问老师 ...

最新文章

  1. 面试官问:高并发下,你都怎么选择最优的线程数?
  2. MyBatis插件使用--分页插件与性能拦截器
  3. Android中AIDL的使用详解
  4. 仿iphone日历插件(beta)
  5. DLL延迟加载工程分析
  6. IIS支持Shtml后辍文件方法
  7. SQL Server 数据库的维护(四)__游标(cursor)
  8. 内存参数 计算_Spark统一内存管理的实现
  9. emmc固件开发_UP2开发板简易开箱(二)
  10. 信息学奥赛 数论专题 2、带 余 除 法
  11. c语言中的*和运算符*,C语言中的运算和运算符
  12. java io 字节流_Java之IO-字节流
  13. 力扣-203 移除链表元素
  14. 【TDA4系列】使用 Linux + RTOS 开发基于以太网的应用程序
  15. 一文读懂: 什么是用户故事?What is User Stories?
  16. 背景建模方法论文总结
  17. 动态规划问题 -- 求给定K个币种时N美元有几种组合方式 (例1,2,3美元存在,求10美元有几种组合方式)
  18. 【Chrome】解决浏览器萤幕画面模糊字体不清楚方法
  19. 常见问题---空指针异常
  20. OpenDaylight-Boron学习笔记: 4 OVSDB模块

热门文章

  1. 我的朋友圈又被刷屏了。
  2. 三千万海外用户的天才程序员之死
  3. 大话程序猿眼里的高并发架构
  4. 将Java EE单体应用打造成微服务
  5. python协程调度方式_python 3.x 学习笔记17(协程以及I/O模式)
  6. 创建一个简单tcp服务器需要的流程
  7. 浏览器同源策略及其规避方法
  8. com scripting读书笔记
  9. 2019南昌网络赛H The Nth Item(二阶线性数列递推 + 广义斐波那契循环节 + 分段打表)题解...
  10. 杭电多校HDU 6586 String(预处理 + 贪心)题解