1. 首页>要闻 > 要闻

缓冲区溢出攻击原理(缓冲区溢出)

作者:何书一
2023年07月04日 15:05
要闻

你们好,最近小元发现有诸多的小伙伴们对于缓冲区溢出攻击原理,缓冲区溢出这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。

1、 在被攻击程序的地址空间中设置攻击代码的方法

2、 1.植入方法

3、 攻击者在被攻击的程序中输入一个字符串,程序会将该字符串放入缓冲区。这个词

4、 符号串中包含的数据是可以在这个被攻击的硬件平台上运行的指令流。在这里,攻击者使用被攻击。

5、 程序的缓冲区用来存储攻击代码。具体方式有两个区别:

6、 攻击者不必为此溢出任何缓冲区;丁找了足够的空间放了攻击代码;

7、 缓冲区可以设置在任何地方:堆栈(存储白色变量)、堆(动态分配区)和静态数据区中初始化或未初始化的数据。

8、 2.使用现有代码

9、 很多时候,攻击者想要的代码已经存在于被攻击的程序中。攻击者所要做的就是给代码传递一些参数,然后让程序跳转到他想要执行的代码。例如,攻击代码要求执行“ex-ec( '/bin/sh ')”,

10、 而libc库中的代码执行“exec( arg)”,其中arg是指向一个字符串的指针参数,那么攻击者只需要改变后继的参数指针指向“/bin/sh”,然后跳转到libc库中对应的指令序列。

11、 将控制程序转换为攻击代码的方法

12、 上面说的方法都是试图改变程序的执行流程,使其跳转到攻击代码。它的基本特点是给程序发送一个超长的缓冲区,没有边界检查或其他弱点,从而扰乱程序的正常执行顺序。通过溢出缓冲区,

13、 攻击者可以用近乎暴力的方法(穷举法)重写相邻程序空题,直接跳过系统检查。

14、 这里的分类标准就是攻击者要找的缓冲区溢出的程序空问类型。原则上可以是任何空题。比如最初的Moms蠕虫(moores蠕虫)用的是fingerd程序缓冲区溢出,

15、 干扰fingerd执行的文件的名称。事实上,许多缓冲区溢出都试图通过暴力方法来改变程序指针。这类程序的区别在于程序空间的突破和内存空间的定位不同。通常情况下,

16、 有几种方法可以将控制程序转换成攻击代码:

17、 1.该函数返回地址

18、 当函数调用发生时,调用者会在堆栈上留下函数返回地址,堆栈中包含函数结束时返回的地址。攻击者通过溢出这些自动变量,使这个返回地址指向攻击代码,这样当函数调用结束时,程序就跳转到攻击者设置的地址。

19、 而不是原先的地址。这种缓冲区溢出被称为“stacksmashing attack' ,是目前常用的缓冲区溢出攻击方式。

20、 2.函数指针

21、 'void( * foo) ()”中声明了一个返回值为void函数指针的变量foo。函数指针定位任何

22、 地址空间,所以攻击者只要在任何空间内的函数指针附近找到一个能够溢出的缓冲区,然后溢出来改变A数指针,当程序通过函数指针调用函数时,程序的流程就会发生改变而实现攻击者的目的。

23、 3.长跳转缓冲区

24、 在C语言中包含了一个简单的检验/恢复系统,称为“setjmp/longjmp' ,意思是在检验点设定“setjmp ( buffer) ',用“longjmp( buffer)”来恢复检验点。可是,

25、 假如攻击时能够进人缓冲区的空间,那么“longjmp( buffer)”实际_I:是跳转到攻击者的代码。像函数指针一样,longjmp缓冲区能够指向任何地方,

26、 所以攻击者所要做的就是找到一个可供溢出的缓冲区。一个典

27、 型的例子就是Perl 5.003,攻击者首先进人用来恢复缓冲区溢出的longjmp缓冲区,然后诱导进人恢复模式,这样就使Perl的解释器跳转到攻击代码L了。

28、 综合代码植人和流程控制技术

29、 最常见和最简单的缓冲区溢出攻击类型就是在一个字符串里综合了代码植人和启动记录。攻击者定位一个可供溢出的自动变Q,接着向程序传递一个很大的字符串,

30、 在引发缓冲区溢出改变启动记录的同时植人了代码(C语言程序员习惯上只为用户和参数开辟很小的缓冲区)。

31、 代码植人和缓冲区溢出不一定要在一次动作内完成,攻击者可以在一个缓冲区内放置代码(这时并不能溢出缓冲区),接着攻击者通过溢出另一个缓冲区来转移程序的指针。

32、 这样的方法通常用来解决可供溢出的缓冲区不够大(不能放下全部的代码)。如果攻击者试图使用已经常驻的代码而不是从外部植入代码,他们通常必须把代码作为参数。举例说明,

33、 在libc(几乎所有的C程序都用它来连接)中的一部分代码段会执行“exec( something) ',其中的something就是参数,攻击者使用缓冲区溢出改变程序的参数,

34、 然后利用另一个缓冲区溢出攻击,使程序指针指向lihc中的特定的代码段。

以上就是缓冲区溢出这篇文章的一些介绍,希望对大家有所帮助。

推荐阅读