网站首页 | 网页制作 | 网络编程 | 图形图象 | 冲浪宝典 | 操作系统 | 软件教学 | 网络安全 | 认证考试 | 下载中心 | 游戏下载
| 网络安全首页 | 安全在线 | 病毒防治 | 黑客攻防 | 漏洞研究 | 黑客编程 | 破解手记 |
您现在的位置: 超人气学院 >> 网络安全 >> 黑客编程 >> 文章正文 用户登录 新用户注册
如何编写自己的缓冲区溢出利用程序?           
如何编写自己的缓冲区溢出利用程序?
作者:未知 文章来源:网络收集 点击数: 更新时间:2006-3-29 15:21:00
内容: 本文主要讲解有关Buffer Overflow的原理, 以及结合实战范例介绍Linux和Solaris下的漏洞利用.
本文并不介绍如何编写shell code.

要求: 读者要有一点C和汇编语言基础.

目标: 希望本文能够尽量做到通熟易懂,使得稍有计算机基础知识的朋友看后能够亲自动手写自己的Exploit
如果你觉得自己哉庑┒级? 就请不要再往下看了.


第一部份 概述篇

1. Buffer overflow是如何产生的?
所谓Buffer overflow, 中文译为缓冲区溢出. 顾名思意, 就是说所用的缓冲区太小了, 以至装不下
那么多的东西, 多出来的东西跑出来了. 就好象是水缸装不了那么多的水, 硬倒太多会溢出来一样;)
那么, 在编程过程中为什么要用到buffer(缓冲区)呢? 简单的回答就是做为数据处理的中转站.

2. UNIX下C语言函数调用的机制及缓冲区溢出的利用.
1) 进程在内存中的影像.
我们假设现在有一个程序, 它的函数调用顺序如下.
main(...) -> func_1(...) -> func_2(...) -> func_3(...)
即: 主函数main调用函数func_1; 函数func_1调用函数func_2; 函数func_2调用函数func_3

当程序被操作系统调入内存运行, 其相对应的进程在内存中的影像如下图所示.

(内存高址)
+--------------------------------------+
| ...... | ... 省略了一些我们不需要关心的区
+--------------------------------------+
| env strings (环境变量字串) | \
+--------------------------------------+ \
| argv strings (命令行字串) | \
+--------------------------------------+ \
| env pointers (环境变量指针) | SHELL的环境变量和命令行参数保存区
+--------------------------------------+ /
| argv pointers (命令行参数指针) | /
+--------------------------------------+ /
| argc (命令行参数个数) | /
+--------------------------------------+
| main 函数的栈帧 | \
+--------------------------------------+ \
| func_1 函数的栈帧 | \
+--------------------------------------+ \
| func_2 函数的栈帧 | \
+--------------------------------------+ \
| func_3 函数的栈帧 | Stack (栈)
+......................................+ /
| | /
...... /
| | /
+......................................+ /
| Heap (堆) | /
+--------------------------------------+
| Uninitialised (BSS) data | 非初始化数据(BSS)区
+--------------------------------------+
| Initialised data | 初始化数据区
+--------------------------------------+
| Text | 文本区
+--------------------------------------+
(内存低址)

这里需要说明的是:
i) 随着函数调用层数的增加, 函数栈帧是一块块地向内存低地址方向延伸的.
随着进程中函数调用层数的减少, 即各函数调用的返回, 栈帧会一块块地
被遗弃而向内存的高址方向回缩.
各函数的栈帧大小随着函数的性质的不同而不等, 由函数的局

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

[ 收藏此页到: 天天|和讯|博采|ViVi|狐摘|我摘|天极 ] 文章录入:kinda    责任编辑:kinda 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    专 题 栏 目
    最 新 热 门
     Windows中巧用RUNDLL3[5355]
     黑客软件编写基础知识[827]
     Win32Asm快速教程[535]
    相 关 文 章
    如何去掉netants1.22的广告
    破解NetAlertv2[热点]指导
    如何用upx解开ASPack+ASPr
    注册机编写器说明文件
    AlgoLabPtVector的破解及注
    如何学好破解这门技术
    STEP7KNOW_HOW_PROTECTver
    VB3.0的程序如何破解
    如何破解PB6.5编译的程序
    如何去掉软件在上任务栏加
    大老的打狗教程第三篇(最终
    如何计算PE头部校验和
    如何突破crackcode的25位限
    如何让crackcode变得具有粘
    如何访问一个进程中的内存
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)