《网络攻防》第十周学习总结

缓冲区溢出漏洞实践

由于实验楼提供的是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,观察结果:

可以看到,攻击成功

时间: 2024-08-30 02:58:20

《网络攻防》第十周学习总结的相关文章

20191302 《信息安全专业导论》第二周学习总结

2019-2020-20191302 <信息安全专业导论>第二周学习总结 教材学习内容总结 -<计算机科学概论>第一章 第十八章 -第一章 全景图 通过第一章的学习我了解了计算机系统的组成,硬件与软件,抽象的概念,计算机的发展历史以及计算机语言,对计算机有了初步的了解,体会到计算机从能充满整个教室的大块头到现在小巧玲珑的笔记本电脑经历了多代的演变,人类科技的进步速度之快令我j惊叹. -第十八章 计算的限制 通过这一章的学习,我了解到数学问题只有一小部分可解,只有一部分问题是计算机可

2019-2020-1 20191312《信息安全专业导论》第九周学习总结

2019-2020-1 20191312<信息安全专业导论>第九周学习总结 教材学习内容总结 这周学习了操作系统层的两章:操作系统和文件系统和目录.从操作系统开始,介绍了操作系统扮演的角色,管理者和服务者.接着介绍了操作系统如何管理进程和内存,并介绍了一些具体的方法.通过对这些管理方法的学习,我进一步了解了计算机的运行原理和方法.然后文件系统和目录这一章介绍了系统中或者说是计算机中文件的储存方法,了解了树状结构下的文件储存,我认为这是一种非常高效的储存方式.同时也学习了对文件的读写方式,和在读

2019-2020 20191212《信息安全专业导论》第二周学习任务总结

这周学习了<计算机科学导论>第一章与第十八章的内容,收获了了以下内容: 第一章: 计算系统的分层,明白了机器语言.汇编语言等之间的关系. 软件和硬件发展史.各个时期的原理与应用场景也有所不同 第一位程序员是Ada Lovelace,简要了解了其生平. 简要了解计算机使用者从系统程序员.应用程序员.计算机用户等之间的转变. 第十八章: 编码数.计算的限制. 计算机历史中引发了一些重大事故 掌握了图灵机与图灵. 2.学习中的问题 1.读第一章计算机史时,难免觉得有些乏味. 2.对前几代计算机的功能

2019-2020-1 20191315《信息安全专业导论》第二周学习总结

教材学习内容总结 第一章全景图学习到了计算系统和计算机硬件软件,明白计算系统可分为多个层次.计算的历史使我们了解到现代计算系统的演变发展过程,计算的历史被划分为四个时代,每个时代都以用于构建硬件的元件和为了让用户利用硬件而开发出软件工具为特征.并区分计算工具和计算学科. 第十八章计算的限制学习到了由于表示的数字有限以及算术运算的限制和精度问题,加上硬件部件的磨损会对计算带来限制.软件的大小和复杂度会产生错误,构建好的软件从项目一开始就关注质量,应用软件工程的规则.学习了问题的分类,了解图灵的生平

20191324《信息安全专业导论》第二周学习总结

教材学习内容总结 1.教材:本周主要学习了第一章和第十八章,了解了计算机硬件和软件的历史,了解现代计算机的来源和众多为计算机事业做出贡献的伟人,了解了图灵机和大O符号和不同软件的参考标准 2.自学是门手艺:阅读和自学能给我们带来很多东西,靠阅读学会一项新技能,(学好英语十分重要),学习新东西千万不要怕 教材学习中的问题和解决过程 问题:测试题里有很多问题看了教材也没找到,自己英语水平也有很大局限性,书本上一些没有的要靠自己找,不会在VS code上使用Python 解决过程:借助谷歌翻译读懂题目

2019-2020学年 20191217《信息安全专业导论》第九周学习总结

1.教材内容总结 本周学习了第十. 十一章<计算机科学与概论>了解了内存,进程,与cpu管理的概念,知道了什么是批处理,并明白了分时的意义.内存管理讲了单块内存管理,分区内存管理,页式内存管理的基本原理.之后又学习了进程管理,知道了不同进程是如何在电脑里切换的.之后学习了cpu调度有先到先服务 最短作业优先等不同类型.十一章学习了文件系统 文件类型 及文件操作,目录树的意义 磁盘调度的意义. 2.学习问题及解决 刚开始不知道为什么要讲这么多磁盘调度的方式 后来知道了二级io部分是计算机系统中最

2019-2020-1 20191230 《信息安全专业导论》第二周学习总结

教材学习内容总结: 只靠阅读就能习得新技能是拥有自学能力的终极目标.以前的观念“有些东西是书里面没有的”其实是书读的还不够多,只要书读的够多,所有问题几乎都能找到答案,但是读书不能只注重读书的数量,还要有选择的读书,放弃那些虚构的作品.知识是无国界的,不能因为语言不通就不去读原版书,版本不同的书给人的感受是不同的.互联网就是一本涉及广,内容新的一本书,通过它就可以了解到世界上的很多东西. 阅读要有策略,不能试图一下子就搞懂,了解一件事物的时候,首先要“脱盲”,先搞懂有关它的一些基本东西.学习一项

2019-2020-1 20191319《信息安全专业导论》第二周学习总结

教学内容总结: 第1章全景图了解了计算机和计算软件的发展历史,明白了计算系统可分为多个层次.计算机 由一个房间大小到现在一个手提包大小让我看到了科技发展的速度.第18章计算的限制让我明 白了什么是精度,有效位,表示误差,下溢,溢出,化零误差和大O符号.知道了算术运算有限制, 通信也有限制,大多数软件代码有错误. 教学学习中的问题和解决过程 问题1:算盘中部横木上为什么有两课珠子? 问题1解决方案:上网搜索发现是16进制用的. 问题2:2的64次方超级计算机为什么要算5年? 问题2解决方案:上网搜

2019-2020学年 20191327《信息安全专业导论》第九周学习总结

1.教材内容学习 了解了应用软件.系统软件.操作软件扮演的不同角色,学习了批处理的由来以及现在的应用,逻辑地址与物理地址的不同,固定分区法.动态分区法在不同与优劣,最先匹配.最佳匹配.最差匹配在不同个情况下应用的优劣情况,时间片的应用以及文件的类型和其不同名词代表的文件信息,目录树以及磁盘调度的学习与理解以及磁盘调度不同方式的优劣. 2.学习过程中的问题 问题:不清楚最先匹配是根据数据从大到小还是按照顺序 解决:通过查询网上信息 3.其他学习 1.按计划阅读<自学是门手艺> 2.学习网课 4.

2019-2020-1 20191232 《信息安全专业导论》第九周学习总结

教材学习内容总结 1.现代软件:应用软件(帮助我们解决现实世界问题).系统软件(管理计算机系统并与硬件进行交互) 2.内存管理: 三种技术的基本原理 单块内存管理 把应用程序载入一段连续的内存区域的内存管理方法 分区内存管理 固定分区法:把内存分为特定数目的分区以载入程序的内存管理方法 动态分区法:根据容纳程序的需要对内存分区的内存管理方法 页式内存管理 把进程划分为大小固定的页,载入内存时存储在帧中的内存管理方法 3.进程状态:创建状态.准备就绪状态.运行状态.等待状态.终止状态. 4.CPU