0x03-逆向-BoF基础的基础

目录

今日目标

今天细看了一下 narnia2(不知道这是什么的小伙伴看我前篇),是个栈溢出的练习。所以,Buffer Overflow,BoF,是今天的主题。这篇文章的标题是基础的基础,我们会把基于栈的溢出深入再深入地探讨一下。网上由很多关于栈溢出地基础例子和文章,想必大家也看过很多了。

带着下面几个问题,我们开始这篇 BoF 基础的基础。无论大家能不能回答这几个问题,看下去,总有一些新的收获。

  • BoF 的前世今生大家了解多少?BoF 有多少种类型?
  • 都说栈溢出,首先,为什么你的程序会有栈?
  • 漏洞叫做栈溢出,EBP,EIP,或者 BP,IP 是寄存器,一个在内存,一个在 CPU,为什么那些文章总说 EBP 和 EIP 会被覆盖,难道栈溢出还能溢出到 CPU ?
  • 那些文章都提到 nop (\x90),nop 到底是什么?为什么要用 nop?

深入 BoF

我们先了解一下 BoF 的一小段历史,BoF 的种类,以及计算机科学家在与 BoF 做长达 20 余年的抗争之后,已经做出过哪些努力。

BoF 的前世今生

早在上世纪的 70 年代,BoF 就已经被发现和记载了。BoF 的可能性被出版在 Computer Security Technology Planning Study 这本书刊。我还在亚马逊找到了这本书,这价格就搞笑了 😂

在这里插入图片描述

言归正传。到 1988 年的时候,才出现有史以来第一次 BoF 的漏洞利用。当时有一个病毒叫做 Moris Worm,它利用几种计算机软件的漏洞在互联网传播,BoF 就是漏洞之一。

这之后,两个重大的蠕虫病毒,Code Red wormSQL Slammer Worm 分别对微软的 IIS 5.0 服务器和 MSSQL Server 2000 进行了攻击。

看来,微软的产品真的不怎么安全。为了加强安全,微软在 2012 年发布了一篇文章,标题为 Security Development Lifecycle (SDL) Banned Function Calls,禁止使用一系列 C 和 C++ 的不安全方法。这是后话。

另外,大家熟知的 XBOX,PS2, Wii 等主机平台的破解,靠的都是某个类型的 BoF。

BoF 的产生,很多时候是程序员在写程序的过程中,使用了本身没有边界自测能力的函数或方法,这类函数或者方法,被称为 Unbounded Functions(暂且意译成无边界函数/方法),因为程序员无法判断什么时候这些方法会停止读取或者写入内存。因此,如果没有很好的手动的边界检测代码,直接使用这些无边界方法,后果就是 BoF。

BoF 的种类

BoF,Buffer Overflow 是所有溢出漏洞的统称。我们这篇文章在实践环节要讨论的,是基于栈的溢出(Stack Overflow)。我们来看一下 BoF 具体有哪些类型。

  • 栈溢出 Stack Overflow,基于栈的溢出,利用不安全方法,通过写入指定长度的数据到栈空间,从而做到对程序跳转地址的控制,执行恶意代码
  • 堆溢出 Heap Overflow,基于堆的溢出,高级话题,我都不知道怎么总结,以后碰到的时候再做特定的深入
  • 整数溢出 Integer Overflow,将 long 这样的整数存入 int 型的变量,造成的溢出
  • 字符编码溢出 Unicode Overflowÿ
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值