没有合适的资源?快使用搜索试试~ 我知道了~
首页Q版Windows缓冲区溢出教程:入门与实战
Q版Windows缓冲区溢出教程:入门与实战
需积分: 10 14 下载量 118 浏览量
更新于2024-07-19
收藏 21.74MB PDF 举报
"《q版缓冲区溢出教程》是一本详细讲解计算机安全漏洞中缓冲区溢出现象的入门书籍。该教程以Windows系统为例,从基础概念入手,逐步深入,包括了缓冲区溢出原理、Windows系统的堆栈结构与溢出报错分析、ShellCode编写技巧、本地和远程溢出漏洞利用实战,以及后门编写和ShellCode提取等内容。 章节1以"Windows下堆栈溢出入门"为主题,介绍了缓冲区溢出的概念,如通过啤酒杯的例子来比喻数据超出内存区域。书中详细探讨了Windows系统中的堆栈工作方式,举例了溢出导致的错误对话框,解析了溢出报错的原因,并通过实际操作演示了如何利用ShellCode进行本地溢出攻击,如FoxMail和Printer漏洞的利用过程。 第二章深化到ShellCode编写,涉及Windows对话框的弹出和用户ShellCode的添加,通过实例让读者理解如何创建和执行自定义代码。这部分内容强调了实践操作的重要性,通过编写和调试代码来掌握ShellCode的使用。 第三章则转向后门的编写和ShellCode的提取,首先概述了所需的基础知识,如IP和Socket编程,以及进程间通信。然后介绍了后门设计的思路,特别是针对Telnet后门的高级语言实现,包括双管道和单管道的实现方法,帮助读者了解如何将溢出攻击转化为更隐蔽的后门工具。 《q版缓冲区溢出教程》适合对网络安全感兴趣的初学者,通过这本书,他们不仅能理解溢出漏洞的原理,还能学习到实用的攻击和防御技术,提升安全防护意识和技能。"
资源详情
资源推荐
1.2啤酒和杯子――缓冲区溢出原理
第一节课,各位同学都规规矩矩的坐在位置上,看着老师,大气也不敢出。
老师带着眼镜,一副精干的样子,看出了大家紧张的神情,于是说道:“大家这么紧张干嘛是
怕这门课的技术还是怕这门课的老师――我啊我很好说话的,都是年轻人嘛;而技术,就比
我更好啦――它是不会说话的。”
“呵呵!是呀!是呀!”大家听了老师的独白都笑了,气氛一下活跃了不少。
老师停了一下,问道:“同学们,这门课叫‘网络攻防’,那你们知道网络上的攻击手段哪些么”
大家听了,马上七嘴八舌的应到:“一些安全杂志上有介绍,好像有注入、缓冲区溢出、劫
持、嗅探……”
“哈哈,对!”老师满意的说道,“大家说得很好!攻防是个全方位的问题,涉及到诸多技术,
但我们课时有限,第一学期只能讲几个有限的部分。现在最流行的有攻击手段两种方式,一
种是SQL注入,另一种就是缓冲区溢出攻击。我们选一个作为首先讨论的主题吧!”
“好啊,好啊!”
“不过讲什么呢好像都挺有意思的。”一位女生说道。
“不知道,投硬币吧!”一个胖乎乎的同学说。
老师眼镜一亮,说:“对,真是个好办法!”
老师摸出一个硬币,拈在手中说:“如果是正面就先讲缓冲区溢出,反面就先讲SQL注入。”语
音刚落,硬币就在空中划出一道美妙的弧线,落在地上转了几圈后停了下来。
前排的几个同学壮着胆子围上去看,叫道:“是正面也!”
“好!那就先讲缓冲区溢出!注入留在以后讲!”老师说道。
“不过似乎很难也……”一个瘦瘦的但很精神的同学说。“不用怕!大家只要有信心、有毅力,
就一定能战胜,Followme!”
“好,首先让我们来认识一下缓冲区以及缓冲区溢出吧!”老师说。
“先作下类比,如果某个人把一瓶啤酒全部倒入一个小杯子中,那装不下的啤酒就会四处冒
出,流到桌子上,这个大家都清楚吧!”
“是啊!是啊!”男生们都遗憾的说到,“那好浪费啊!”
那个胖胖的同学说:“这么好的天,啤酒、小菜,再加上超爆DVD大片,好舒服啊!”
“就是啊,谁这么做的拖出来打一顿!”大家的情绪被带动起来了。
Q版缓冲区溢出教程
161.2啤酒和杯子――缓冲区溢出原理
“安静!安静!”老师好不容易把持序维护下来,然后兴致索然的说,“我只是打个比方而已!
你们什么都能联想到吃。那位同学,你叫什么名字呢”
那位胖胖的同学老实的答道:“我叫玉波。”玉波果然像名字一样,长的白白胖胖的,一张圆乎
乎的脸,挺可爱的样子。
“不过我很理解你们,食堂的饭菜是太难吃了。”老师挺同情的说道,“大学食堂就是伤心太平
洋啊!”
“哈哈哈哈……”同学们都乐了,教室里充满了愉快的笑声。
等大家平稳下来后,老师继续说道:“同样的道理,在计算机内部,输入数据通常被存放在一
个临时空间内,这个临时存放空间就被称为缓冲区,缓冲区的长度事先已经被程序或者操作
系统定义好了。缓冲区就很像那个啤酒杯,用来装东西,而且大小固定。”
“向缓冲区内填充数据,如果数据的长度很长(如同那瓶啤酒),超过了缓冲区(那个啤酒
杯)本身的容量,那么结果就如同啤酒一样,四处溢出,数据也会溢出存储空间!装不下的
啤酒会流到桌子上,而装不下的数据则会覆盖在合法数据上,这就是缓冲区和缓冲区溢出的
道理。”
“当然在理想的情况下,程序检查每个数据的长度,并且不允许超过缓冲区的长度大小,就像
在倒啤酒的时候,啤酒要冒出杯子时我们就停止。但有些程序会假设数据长度总是与所分配
的存储空间相匹配,而不作检查,从而为缓冲区溢出埋下隐患。”
“OK,那我们如何利用缓冲区溢出呢在一般情况下,就像啤酒会到处流满桌面一样,溢出的数
据会覆盖掉任何数据、指针或内容。除了破坏之外,对攻击者来说没有任何好处。但我们可
引导溢出的数据,使计算机执行我们想要的命令。这就是很多漏洞公告上说的:‘黑客可以用
精心构造的数据……’。道理就是这样。”
“如果初学,还不熟悉这个概念,可先把缓存区溢出利用理解为允许攻击者往某个程序变量中
放一个比期望长度要长的值,由此以当前运行该程序的用户的特权执行任意命令。”
“而具体的利用和方法,就是如何精心构造。”老师最后说道。
Q版缓冲区溢出教程
171.2啤酒和杯子――缓冲区溢出原理
1.3神秘的Windows系统
“大家都听明白了吗”老师问大家。
“呜啦!”同学们高高兴兴的说,“明白什么是缓冲区溢出了!就是啤酒和杯子嘛!那我们就开
始学习注入了吧,老师!”
“晕哦!这只是最基本的缓冲区溢出原理,要想掌握利用还早着呢!都坐下!”老师又好气又
好笑的说。
待大家又安静下来后,老师说:“学缓冲区溢出要有信心,但也不能浮躁,知道缓冲区的系统
结构吗知道怎么执行我们想要的程序吗嗯”
大家摇摇头:“不知道。”
“好,既然不知道,那就安安静静的坐好,马上就是最关键的地方了。”
同学们问道:“什么关键的地方呢”
“就是Windows系统内部处理缓冲区的机制,我们明白了这个之后,就可利用缓冲区溢出漏洞
来控制别人的主机。”
“哇,好哦!”教室里一阵欢呼。
“为了讲清楚Windows是如何处理缓冲区的,我们先看一段很简单的程序。考虑到大家的初学
基础,我会尽量少提复杂的代码,多作感性的讲解。”
“是啊,一看复杂的代码就头大,这样好啊!”又一阵欢呼。
“对,我的目的就是让你们知道那些复杂代码是如何来的,而理解了下面这个很简单的程序,
再看其他的那些程序时,会发现思路基本上都是一样的。”
“嗯!好!那快给我们看看那段程序吧!”大家都迫不及待了。
“大家的热情都很高嘛,好的!”
Q版缓冲区溢出教程
181.3神秘的Windows系统
1.3.1溢出例子――报错对话框
“这个很简单的程序是这样的。”老师在墙上做出投影。
/*很简单的程序:*/
#include<stdio.h>
#include<string.h>
charname[]=“ww0830”;pu
intmain()
{
charoutput[8];
strcpy(output,name);
for(inti=0;i<8&&output[i];i++)
printf("\\0x%x",output[i]);
return0;
}
“这个程序,还比较简单吧?”老师小心翼翼的问台下的同学。
台下一阵默然,同学们都在头晕中呢……
“好,我来解释一下!这是用C语言写的程序!”老师说。
台下一阵狂晕:“地球人都知道!”
“不要急,我一句一句的来。首先,#include<stdio.h>和#include<string.h>是包含这两个头
文件进来,因为后面使用的strcpy函数和printf函数是这两个头文件中定义的。”
“嗯,这个清楚了。”
“然后,charname[]=“ww0830”;是把‘name’这个数组赋值,往里面放入‘ww0830’这几个字
符。”
“哦,为什么要放入‘ww0830’而不放其他的呢?”大家疑惑不解。
“因为这是我的名字啦,哈哈!这个并不重要,什么都可以放,后面大家就会看到的。然后是
intmain(){……},这个是重点啦,这就是我们常说的主函数!程序进来就是先找到这个地
方,执行里面的语句。”
“接下来的charoutput[8];strcpy(output,name);就是让系统给output变量分配8个char的空
间,然后把‘name’里面装的字符拷贝给它。”
“strcpy(des,source)这个拷贝函数是把第二个参数source的值拷给第一个参数des。它不
检查拷贝的长度,它会一直拷贝,直到source到结尾。这就是它的弱点了!”
“下面的for(inti=0;i<8&&output[i];i++)printf("\0x%x",output[i]);只是让大家方便检查output里
面的值而已,我把它以16进制的形式打出来。”
台下听得聚精会神,一片安静。
Q版缓冲区溢出教程
191.3.1溢出例子――报错对话框
“好,让我们运行一下,看看结果吧!在VC中编译、链接、执行,如图1-1。”
“看,打出来的是\0x77\0x77\0x30\0x38\0x33\0x30,77就是‘w’的16进制表示,而30、38、
33、30就是‘0830’的16进制表示。程序运行后一切正常,把‘ww0830’的16进制打出后,安全
退出了。”
“嗯,呼……”台下长出了一口气,连几个女生也说道,“对,明白了,明白了。”
“呵呵,大家明白了就好。刚才大家不是问为什么要输入‘ww0830’吗,好!那我稍微改一下,
改成其他的。”
“这次我把‘name[]’的值赋成‘abcdefgh’,大家再看看运行的结果有什么问题没有!如图1-2。”
Q版缓冲区溢出教程
201.3.1溢出例子――报错对话框
剩余374页未读,继续阅读
whb224117
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++多态实现机制详解:虚函数与早期绑定
- Java多线程与异常处理详解
- 校园导游系统:无向图实现最短路径探索
- SQL2005彻底删除指南:避免重装失败
- GTD时间管理法:提升效率与组织生活的关键
- Python进制转换全攻略:从10进制到16进制
- 商丘物流业区位优势探究:发展战略与机遇
- C语言实训:简单计算器程序设计
- Oracle SQL命令大全:用户管理、权限操作与查询
- Struts2配置详解与示例
- C#编程规范与最佳实践
- C语言面试常见问题解析
- 超声波测距技术详解:电路与程序设计
- 反激开关电源设计:UC3844与TL431优化稳压
- Cisco路由器配置全攻略
- SQLServer 2005 CTE递归教程:创建员工层级结构
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功