编写自己的缓冲区溢出利用程序

编写自己的缓冲区溢出利用程序

ID:39411637

大小:122.00 KB

页数:38页

时间:2019-07-02

编写自己的缓冲区溢出利用程序_第1页
编写自己的缓冲区溢出利用程序_第2页
编写自己的缓冲区溢出利用程序_第3页
编写自己的缓冲区溢出利用程序_第4页
编写自己的缓冲区溢出利用程序_第5页
资源描述:

《编写自己的缓冲区溢出利用程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、编写自己的缓冲区溢出利用程序日期:2004年3月20日作者:清风学院人气:155查看:[大字体中字体小字体]内容: 本文主要讲解有关Buffer Overflow的原理, 以及结合实战范例介绍Linux和Solaris下的漏洞利用. 本文并不介绍如何编写shell code. 要求: 读者要有一点C和汇编语言基础. 目标: 希望本文能够尽量做到通熟易懂,使得稍有计算机基础知识的朋友看后能够亲自动手写自己的Exploit 如果你觉得自己对这些都懂了, 就请不要再往下看了. 第一部份 概述篇 1. Buffer overflow是如何产生的? 所谓Buffer overflow, 中文译为缓

2、冲区溢出. 顾名思意, 就是说所用的缓冲区太小了, 以至装不下 那么多的东西, 多出来的东西跑出来了. 就好象是水缸装不了那么多的水, 硬倒太多会溢出来一样;) 那么, 在编程过程中为什么要用到buffer(缓冲区)呢? 简单的回答就是做为数据处理的中转站. 2. UNIX下C语言函数调用的机制及缓冲区溢出的利用. 1) 进程在内存中的影像. 我们假设现在有一个程序, 它的函数调用顺序如下. main(...) -> func_1(...) -> func_2(...) -> func_3(...) 即: 主函数main调用函数func_1; 函数func_1调用函数func_2; 函数

3、func_2调用函数func_3 当程序被操作系统调入内存运行, 其相对应的进程在内存中的影像如下图所示. (内存高址) +--------------------------------------+ 

4、 ...... 

5、 ... 省略了一些我们不需要关心的区 +--------------------------------------+ 

6、 env strings (环境变量字串) 

7、  +--------------------------------------+  

8、 argv strings (命令行字串) 

9、  +--------------------------

10、------------+  

11、 env pointers (环境变量指针) 

12、 SHELL的环境变量和命令行参数保存区 +--------------------------------------+ / 

13、 argv pointers (命令行参数指针) 

14、 / +--------------------------------------+ / 

15、 argc (命令行参数个数) 

16、 / +--------------------------------------+ 

17、 main 函数的栈帧 

18、  +--------------------------------------+

19、  

20、 func_1 函数的栈帧 

21、  +--------------------------------------+  

22、 func_2 函数的栈帧 

23、  +--------------------------------------+  

24、 func_3 函数的栈帧 

25、 Stack (栈) +......................................+ / 

26、 

27、 / ...... / 

28、 

29、 / +......................................+ / 

30、 Heap (堆) 

31、 / +--------------------

32、------------------+ 

33、 Uninitialised (BSS) data 

34、 非初始化数据(BSS)区 +--------------------------------------+ 

35、 Initialised data 

36、 初始化数据区 +--------------------------------------+ 

37、 Text 

38、 文本区 +--------------------------------------+ (内存低址) 这里需要说明的是: i) 随着函数调用层数的增加, 函数栈帧是一块块地向内存低地址方向延伸的. 随着进程中函数调用层数的减少, 

39、即各函数调用的返回, 栈帧会一块块地 被遗弃而向内存的高址方向回缩. 各函数的栈帧大小随着函数的性质的不同而不等, 由函数的局部变量的数目决定. ii) 进程对内存的动态申请是发生在Heap(堆)里的. 也就是说, 随着系统动态分 配给进程的内存数量的增加, Heap(堆)有可能向高址或低址延伸, 依赖于不 同CPU的实现. 但一般来说是向内存的高地址方向增长的. iii) 在BSS数据或者Stack(栈)的增长耗尽了系统分配给进程

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。