《网络攻防》第十周学习总结
缓冲区溢出漏洞实践
由于实验楼提供的是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
《网络攻防》第十周学习总结相关推荐
- 网络攻防 第三周学习总结
教材学习内容总结 网络攻防第三章主要介绍了网络信息收集技术,对目标入侵之前会从目标的名称和域名入手,包括IP地址范围.详细的注册信息.DNS服务器位置.电话号段.网络或安全管理员及联系方式等.收集的方 ...
- 20169220 网络攻防实践 第二周学习总结
20169220 赵京鸣 2016/2017-2 第二周学习总结 进度:1.教材第1-2章/12章 2.Kali教学视频1-5/36 3.查找2个安全工具/5 4.国内外黑客.电影书籍了解 5.lin ...
- 20155230 2016-2017-2 《Java程序设计》第十周学习总结
20155230 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程:就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发 ...
- # 20155337 2016-2017-2 《Java程序设计》第十周学习总结
20155337 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程 •网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就 ...
- 20145302张薇《Java程序设计》第十周学习总结
20145302 <Java程序设计>第十周学习总结 客户端和服务器端功能 客户端程序功能列表: 接收用户控制台输入 判断输入内容是否合法 按照协议格式发送数据 根据服务器端的反馈给出相应 ...
- 20155305乔磊2016-2017-2《Java程序设计》第十周学习总结
20155305乔磊2016-2017-2<Java程序设计>第十周学习总结 教材学习内容总结 Java的网络编程 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. ...
- 20145324 《信息安全系统设计基础》第十周学习总结
20145324 <信息安全系统设计基础>第十周学习总结 学习内容总结 who •who能做什么:显示目前登入系统的用户信息 •man who •使用一下 ①who ②who am i ③ ...
- 201521123038 《Java程序设计》 第十周学习总结
201521123038 <Java程序设计> 第十周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题 ...
- 20172313 2017-2018-2 《程序设计与数据结构》第十周学习总结
20172313 2017-2018-2 <程序设计与数据结构>第十周学习总结 教材学习内容总结 了解集合的同构和异构:同构集合保存类型全部相同的对象,异构集合可以保存各种类型的对象. 集 ...
- 第十周学习总结--助教
第十周学习总结 一. 学习内容总结 这周的题目有四道题,前面三题都不难,最后一题用模拟除法去写,还是思考了很长的时间. 二. 学习和作业中的问题和解决过程 1.没有思路,无从下手 解决:问老师 ...
最新文章
- 面试官问:高并发下,你都怎么选择最优的线程数?
- MyBatis插件使用--分页插件与性能拦截器
- Android中AIDL的使用详解
- 仿iphone日历插件(beta)
- DLL延迟加载工程分析
- IIS支持Shtml后辍文件方法
- SQL Server 数据库的维护(四)__游标(cursor)
- 内存参数 计算_Spark统一内存管理的实现
- emmc固件开发_UP2开发板简易开箱(二)
- 信息学奥赛 数论专题 2、带 余 除 法
- c语言中的*和运算符*,C语言中的运算和运算符
- java io 字节流_Java之IO-字节流
- 力扣-203 移除链表元素
- 【TDA4系列】使用 Linux + RTOS 开发基于以太网的应用程序
- 一文读懂: 什么是用户故事?What is User Stories?
- 背景建模方法论文总结
- 动态规划问题 -- 求给定K个币种时N美元有几种组合方式 (例1,2,3美元存在,求10美元有几种组合方式)
- 【Chrome】解决浏览器萤幕画面模糊字体不清楚方法
- 常见问题---空指针异常
- OpenDaylight-Boron学习笔记: 4 OVSDB模块
热门文章
- 我的朋友圈又被刷屏了。
- 三千万海外用户的天才程序员之死
- 大话程序猿眼里的高并发架构
- 将Java EE单体应用打造成微服务
- python协程调度方式_python 3.x 学习笔记17(协程以及I/O模式)
- 创建一个简单tcp服务器需要的流程
- 浏览器同源策略及其规避方法
- com scripting读书笔记
- 2019南昌网络赛H The Nth Item(二阶线性数列递推 + 广义斐波那契循环节 + 分段打表)题解...
- 杭电多校HDU 6586 String(预处理 + 贪心)题解