缓冲区溢出分析第01课:缓冲区溢出分析导论

前言

《缓冲区溢出分析》这一系列的内容是我为“i春秋”所录制的同名视频课程的讲稿汇总。每次我都是在写完课程的文档后,再依据文档内容进行课程的讲解。而本系列的内容也是从零开始,来给大家由浅入深地进行缓冲区溢出漏洞的讲解。整个课程是理论与实践相结合,每讲完几个基础理论后,都会配以实际的软件中的漏洞进行分析,以帮助大家更好地理解漏洞的原理。

课程导论

漏洞指的是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,通常是由程序的编写者在编写时的疏忽造成的。漏洞的存在使攻击者能够在未经允许的情况下访问或者破坏目标系统,这在无形中给用户系统的安全带来了很大的威胁。

一般来说,软件漏洞并不影响程序的正常功能,但是如果被攻击者成功利用,就有可能使得软件去执行额外的恶意代码。漏洞挖掘和利用是一门非常高深的技术,甚至是一门艺术,这些都是顶级黑客才干得了的活儿。

大多数程序漏洞挖掘与内存破坏有关,比如最为常见的缓冲区溢出那样的漏洞挖掘技术。使用这类技术的最终目标是控制目标程序的执行流程,以欺骗程序使其运行一段偷偷植入内存的恶意代码,这样黑客就可以使程序做他想要做的几乎任何事情。

说到溢出,可能在我们的头脑中首先浮现出来的是水的溢出:

图1 水的溢出

水杯的大小是固定的,如果杯子没有装满,那么就不会有什么问题。可是一旦装满了,还继续装的话,那么这个时候,水就会不断地溢出。

在计算机内部,输入数据通常被存放在一个临时空间内,这个临时存放的空间就被称为缓冲区,缓冲区的长度事先已经被程序或者操作系统定义好了。向缓冲区内填充数据,如果数据的长度很长,超过了缓冲区本身的容量,那么数据就会溢出存储空间,而这些溢出的数据还会覆盖在合法的数据上,这就是缓冲区和缓冲区溢出的道理。

当然在理想的情况下,程序会检查每个数据的长度,并且不允许超过缓冲区的长度大小,但有些程序会假设数据长度总是与所分配的存储空间相匹配,而不做检查,从而为缓冲区溢出埋下隐患。

那么我们应该如何利用缓冲区溢出呢?一般情况下,溢出的数据会覆盖掉相邻区域的内容。我们可以利用溢出的数据,使计算机执行我们想要的命令。这就是很多漏洞公告上说的:“黑客可以用精心构造的数据……”道理就是这样。

作为初学者,如果还不熟悉这个概念,可先把缓冲区溢出利用理解为允许攻击者往某个程序变量中放一个比预期长度要长的值,由此以当前运行该程序的用户的特权执行任意命令。

第一个缓冲区溢出攻击——Morris蠕虫,发生在1988年,由罗伯特莫里斯(Robert Morris)制造,它曾造成全世界6000多台网络服务器瘫痪。时至今日,溢出攻击依旧是安全领域的热门话题,比如乌云网(WooYun.org)总会有关于缓冲区溢出类漏洞的报告:

图2 某软件的缓冲区漏洞概要

这是关于兴业银行的,提交于2014年9月22日的,关于“缓冲区溢出”的漏洞报告。下面是宜信平台的溢出报告:

图3 某平台的堆栈溢出漏洞概要

可见缓冲区溢出漏洞确实是普遍存在的。

最后再讲一下我们这个系列的课程安排,首先会给大家分析基础的缓冲区溢出漏洞的原理以及利用方法,以及基础 ShellCode的编写方法,随着课程的不断深入,我会不断地完善我们的 ShellCode,并且结合真实的漏洞案例进行分析。之后还会给大家介绍更多种类的缓冲区溢出方法,还有缓冲区溢出漏洞的高级防范措施等。我希望本系列的课程能够培养大家的安全意识,扩展大家的思维,使得大家在学习完这一系列的课程之后,都能打下坚实的基础,令每一位朋友都能够成为安全领域的专家。

时间: 2025-01-12 13:17:14

缓冲区溢出分析第01课:缓冲区溢出分析导论的相关文章

缓冲区溢出分析第06课:W32Dasm缓冲区溢出分析

漏洞报告分析 学习过破解的朋友一定听说过W32Dasm这款逆向分析工具.它是一个静态反汇编工具,在IDA Pro流行之前,是破解界人士必然要学会使用的工具之一,它也被比作破解界的"屠龙刀". 但是即便是这么一款破解界的"神器",竟然也是存在着缓冲区溢出的漏洞的.可见,它在破解无数程序的同时,其自身也存在着被"黑"的风险.那么我们可以首先分析一下漏洞报告: ##############################################

缓冲区溢出分析第11课:整数溢出的原理

<缓冲区溢出分析>这一系列的内容是我为"i春秋"(www.ichunqiu.com)所录制的同名视频课程的讲稿汇总.每次我都是在写完课程的文档后,再依据文档内容进行课程的讲解.而本系列的内容也是从零开始,来给大家由浅入深地进行缓冲区溢出漏洞的讲解.整个课程是理论与实践相结合,每讲完几个基础理论后,都会配以实际的软件中的漏洞进行分析,以帮助大家更好地理解漏洞的原理.有兴趣的朋友可以结合本文与配套视频进行学习. 前言 我们之前所研究的漏洞,都是非常经典的栈溢出漏洞,也是最为常见

智慧解析第01课:九鼎

智慧解析第01课:九鼎,布布扣,bubuko.com

【自动语音识别课程】第二课 语音信号分析

[传送门] [自动语音识别课程]第一课 统计语音识别介绍 原文地址:http://blog.csdn.net/joey_su/article/details/36414877 转载请注明出处,欢迎交流. 概述 针对ASR的语音信号分析 特征 频谱分析 倒谱分析 标准特征:MFCC和PLP分析 动态特征 第一课的结尾提到了语音识别的框图,下图展示了信号分析技术在语音识别系统中的位置: 我们先来认识下语音的产生过程: 语音是在发音器官和声道共同作用下产生的.说话时,声带振动发出具有一定周期特性(基音

【通知】《算法设计与分析》实验课、理论课补课、考试时间、加分等安排 及 个人目标设定

Logistic回归为概率型非线性回归模型,是研究二分类观察结果与一些影响因素之间关系的一种多 变量分析方法.通常的问题是,研究某些因素条件下某个结果是否发生,比如医学中根据病人的一些症状来判断它是 否患有某种病. 在讲解Logistic回归理论之前,我们先从LR分类器说起.LR分类器,即Logistic Regression Classifier. 在分类情形下,经过学习后的LR分类器是一组权值,当测试样本的数据输入时,这组权值与测试数据按 照线性加和得到 这里是每个样本的个特征. 之后按照s

有效防止softmax计算时上溢出(overflow)和下溢出(underflow)的方法

<Deep Learning>(Ian Goodfellow & Yoshua Bengio & Aaron Courville)第四章「数值计算」中,谈到了上溢出(overflow)和下溢出(underflow)对数值计算的影响,并以softmax函数和log softmax函数为例进行了讲解.这里我再详细地把它总结一下. 『1』什么是下溢出(underflow)和上溢出(overflow) 实数在计算机内用二进制表示,所以不是一个精确值,当数值过小的时候,被四舍五入为0,这

“金山杯2007逆向分析挑战赛”第一阶段第一题分析

题目来自于如下网址: http://www.pediy.com/kssd/ 第13篇 论坛活动 \ 金山杯2007逆向分析挑战赛 \ 第一阶段 \ 第一题 \ 题目 \ [第一阶段 第一题]: 现将此题目概述粘贴如下: CrackMe.exe 是一个简单的注册程序,见附件,请写一个注册机: 要求: 1. 注册机是KeyGen,不是内存注册机或文件Patch 2. 注册机可以使用ASM,VC,BC,VB,Delphi等语言书写,其他谢绝使用. 3. 注册机必须可以运行在Windows系统上. ..

传奇源码分析-客户端(游戏逻辑处理源分析四)

现在假设玩家开始操作游戏:传奇的客户端源代码工程WindHorn一.CWHApp派生CWHWindow和CWHDXGraphicWindow.二.CWHDefProcess派生出CloginProcess.CcharacterProcess.CgameProcess客户端WinMain调用CWHDXGraphicWindow g_xMainWnd;创建一个窗口.客户端CWHDXGraphicWindow在自己的Create函数中调用了CWHWindow的Create来创建窗口,然后再调用自己的C

传奇源码分析-客户端(游戏逻辑处理源分析五 服务器端响应)

器执行流程:(玩家走动) GameSrv服务器ProcessUserHuman线程处理玩家消息:遍历UserInfoList列表,依次调用每个UserInfo的Operate来处理命令队列中的所有操作; pUserInfo->Operate()调用m_pxPlayerObject->Operate()调用.判断玩家if (!m_fIsDead),如果已死,则发送_MSG_FAIL消息.我们在前面看到过,该消息是被优先处理的.否则则调用WalkTo,并发送_MSG_GOOD消息给客户端.Walk