52

缓冲区溢出实战教程系列(一):第一个缓冲区溢出小程序

 5 years ago
source link: https://www.freebuf.com/articles/system/195614.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

*本文原创作者:kaliking,本文属于FreeBuf原创奖励计划,未经许可禁止转载

在安全圈里我们会经常听到或用到一些0day漏洞,在印象里我们都觉的只有真正的大神才能挖掘到这样的漏洞,事实也的确如此。不过也不要被吓到,其实大部分的0day是缓冲区溢出漏洞演化而来,只要我们了解了缓冲区溢出原理,假以时日也可以自己挖掘出0day漏洞。

由于是本系列的开篇,所以不给大家讲解过多的原理,今天先让大家直观感受一下什么是缓冲区溢出,让各位有一个初步的认识,闲话少叙,让我们开始。

zuy67vV.jpg!web

给大家一段c语言编写的代码,大家在DEV中编译执行一下:

#include <stdio.h>
#include <string.h> 

char name[] = "kalikingkalikingkaliking" ; 

int main()
{
char buffer[8];
strcpy(buffer, name);
printf("%s\n",buffer);
getchar();
return 0;
}

在win7中会出现以下报错,如图所示:

beIJF32.jpg!web 有一点c语言基础的人就不难看出问题所在,在程序中我们要把变量name的值拷贝给变量buffer,但我们分配给变量的空间只有8个字节,而name的长度远远大于8个字节。这就导致系统原本分配的空间不足而占用了本来用于存储程序返回地址的空间,导致程序无法正常运行。

今天先不讲原理,先讲讲分析缓冲区溢出必备的几款软件:

1. Dev-C ++  是一个 免费的 全功能 集成开发环境 (IDE),分布在 GNU通用公共许可证下, 用于 CC ++编程 。它是用 Delphi 编写的。 JzUrMfM.jpg!web

免费下载地址:://sourceforge.net/projects/orwelldevcpp/files/latest/download

2. OllyDbg (以其作者Oleh Yuschuk命名)是一个强调二进制代码分析的x86调试器。

vUNjim3.jpg!web

免费下载地址: http://www.ollydbg.de/odbg201.zip

3. IDA  (Interactive Disassembler)是 反汇编计算机 软件 ,其生成 汇编语言 源代码 从机器可执行代码。它支持多种 可执行文件格式 为不同 的处理器操作系统 。它还可以用作Windows PE, Mac OS X  Mach-OLinux  ELF 可执行文件的 调试器

v2myymq.jpg!web

免费版下载地址: https://www.hex-rays.com/products/ida/support/download_freeware.shtml

接下来介绍一下三个软件的基本使用方法:

在这里只介绍在程序分析过程中常用的方法,其余的详细使用教程请自行Google

Dev c++的使用方法:

1.新建源代码文件

由于我们编写的源代码,只为了了解缓冲区溢出的原理,所以不必过于复杂,我们只需要新建个源代码文件就可以了,没必要创建项目文件。

namyIj6.jpg!web

把我们上边的示例代码拷贝进去,保存与其他编辑器无异,ctrl+s就ok,我习惯保存成c文件,这个大家随意。

zQVRFbN.jpg!web

2.编译运行:

编译运行就很简单了,点击工具栏最上方的运行,接着在下拉菜单中找到编译和运行,点击:

iyae6zq.jpg!web

这时候会看到文件夹中多了一个exe文件这就是我们要用来调试的程序:

jyMz6zQ.jpg!web

3.调试和查看汇编代码

这个是比较重要的一步,因为在编写shellcode的时候会用到,这里只讲用法,如何提取shellcode以后再讲。

首先设置断点,选择设置断点的行,可以再前面行标出单击也可以按F4,当行标处出现红点说明断点设置成功。

UV7Fzuz.jpg!web

然后开启调试模式,我们点击下方选项卡里的调试,接着点击调试按钮。

IRVfQ3e.jpg!web

接着点击查看CPU窗口: 2aiqieI.jpg!web

我们就会看到汇编代码界面:

juiqiiQ.jpg!web

dev c++几个重要用法已经说完了,还要跟大家说一下如何解决安装使用过程中经常会出现zlib2.dll文件丢失的问题。

解决办法如下:

1.下载zlib1.dll:

http://www.pc6.com/softview/SoftView_81060.html

2.解压后放到系统目录中

32位系统:放到C:\Windows\System32\(此处为系统目录)

64位系统:放到C:\Windows\SysWOW64\

为了不使篇幅过长,其余两个软件使用方法我将在下一篇文章中进行讲解。

*本文原创作者:kaliking,本文属于FreeBuf原创奖励计划,未经许可禁止转载


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK