SEED:缓冲区溢出漏洞实验

更多精彩尽在这里,详情点击:http://motorcycleinsurancetips.net/,杜锋被驱逐

前言:本文是基于美国雪城大学的seed实验所做的缓冲区溢出实验,笔者在进行实验的时候参考了网上已有的部分博客,但是发现存在部分细节没有详细解释,导致实验过程中难以复现上述攻击。因此重新梳理了整个实验过程,涉及原理的内容不再赘述,详见下面链接中提供的实验说明,希望对各位读者起到一定帮助。

缓冲区溢出是指程序试图写入超出预分配范围的数据的条件固定长度的缓冲区的漏洞。恶意用户可以使用此漏洞来更改程序的流控制,导致执行恶意代码。此漏洞是由于用于数据(例如缓冲区)和用于控件的存储(例如返回地址)混合存储引起的:数据部分中的溢出会因为溢出会更改返回地址,所以会影响程序的控制流程。本实验的任务是设计一种利用此漏洞并最终获得root特权的方案。

下图给出一个示例代码,展示了函数调用过程中堆栈的结构,在实验中,我们的恶意代码就是通过buffer数组传入栈中,因为传入的数据超过了buffer数组预定义的长度,而strcpy函数不进行边界检查,导致了恶意代码覆盖原有的栈内信息,从而修改返回地址,控制代码执行我们插入的恶意代码。因此我们的任务是,根据右图栈的结构,推断出返回地址和buffer数组的相对位置,从而精准的覆盖原来的返回地址,写入恶意代码的内存地址。

确定str在内存中的位置=ebp-0×211,在main函数任一位置加断点,查看ebp的信息

通过bof的代码我们发现,什么叫缓冲区在调用strcpy函数之前,需要将两个参数str,buffer先后压栈,因此,return地址=buffer地址+0×20+0×04。即将在buffer[36]的位置放入要跳转到的恶意代码地址,去覆盖原来的return address。(注意:如果buffer数组大小变化,那么它到ebp的相对位置也会和变化,在本例中是36,这时需要重新计算return地址的相对位置)

通过上述分析,构造恶意代码和对应的地址写入badfile文件的恰当位置,使得漏洞程序被攻击,从而实现提权攻击。杜锋被驱逐

编译运行攻击程序构造badfile,然后运行漏洞程序stack,结果如下:

tips:如果攻击结果显示segmentation fault,则说明内存地址计算错误,请重新反汇编计算;如果出现$,则说明未向stack程序赋予root权限。参照第二点处理。

千锋C语言教程:211_重构_02_缓冲区溢出_最新版C语言基础视频教程—千锋教育

视频介绍:预备课程这一章内容有:搭建环境、Vim工具使用、Emacs大神工具使用。君欲善其事,必先利其器。巧妇难为无米之炊啊!所以这一章我们先介绍环境的搭建,黑客艺术当然不会使用Windows了,要使用Linux或MacOS。编辑器我们没有使用VisualStdio、Eclipse、IntelliJ,而是Vim或Emacs,这样可以铸就未来黑客的你。Let’sPlaytheGame.第一章《变量和操作》的内容有:Overture是第一章的总介绍、总览编程的基本知识、数据类型和大小、操作符、表达式。第一章是最基础的,但我也忍不住加入了一些比较基础的黑客理念和绝技,所以之后是重构、陷阱和瑕疵、殷勤的总结黑客技巧、编程箴言、作业。请放心!每个掌握了小学数学知识的人都具备理解这些内容所需要的数学技能。什么叫缓冲区今天所学习的知识可能看起来很简单,也可能有些人觉得数据类型这些太简单也没有意思,上来就想写大程序,但是我们还不得不用心的去重温和对比,后半部分有重构、陷阱和瑕疵、殷勤的总结等部分就是为黑客级别特殊预备的。数据处理不当会引起大量计算机的安全漏洞,这些都是由于计算机算术运算的微妙细节引发的。所以,这节课真的很重要!利用今天所学的知识,慢慢积累就能做出很像样而且好玩的程序了,甚至一个探索神秘宇宙的太空飞船系统。数据是程序设计之根本,所以今天的课程是我们编程中最最基础的知识,Payattentiontoit。第二章《输入和输出》的内容有:出场、
更多精彩尽在这里,详情点击:http://motorcycleinsurancetips.net/,杜锋被驱逐格式化输出、转换说明符、字面常量、格式化输入、从流中得到一个字符、从终端得到一个字符、输出字符到流、从流中得到一行字符、把一行字符放到流中、陷阱和瑕疵、殷勤的总结、大作业。每个程序有都3大部分:输入、处理、输出。有了输入、输出功能我们就能写出用户和计算机交互的程序,借助输入可以把你的想法告诉计算机,计算机把处理的结果通过输出告诉我们。计算机不是冰冷的电子零件,也不是玩游戏的奴隶,她将成为你炙热的恋人。可以写出很多精彩、出色、有价值的程序,甚至是艺术作品。其实,这些函数都很有意思,有些是明显有Bug的,呵呵!这也是黑客最喜欢的。我们来找出这些Bug,在我们写的代码中避免,如果你有本事甚至可以去别人的电脑逛一圈看看,不过这可是非法的。我们利用这一章学习的这些东西,还能写出很出色的游戏,有什么游戏是你想写的?