溢出攻击属于社会工程学(溢出攻击)
大家好,我是小曜,我来为大家解答以上问题。溢出攻击属于社会工程学,溢出攻击很多人还不知道,现在让我们一起来看看吧!
1、缓冲区溢出攻击之所以成为一种常见的攻击手段,其原因在于缓冲区溢出漏洞太普通了,并且易于实现。
2、而且,缓冲区溢出所以成为远程攻击的主要手段,其原因在于缓冲区溢出漏洞给予了攻击者所想要的一切:殖入并且执行攻击代码。
3、被殖入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。
4、 缓冲区是内存中存放数据的地方。
5、在程序试图将数据放到机器内存中的某一个位置的时候,因为没有足够的空间就会发生缓冲区溢出。
6、而人为的溢出则是有一定企图的,攻击者写一个超过缓冲区长度的字符串,植入到缓冲区,然后再向一个有限空间的缓冲区中植入超长的字符串,这时可能会出现两个结果:一是过长的字符串覆盖了相邻的存储单元,引起程序运行失败,严重的可导致系统崩溃;另一个结果就是利用这种漏洞可以执行任意指令,甚至可以取得系统root特级权限。
7、 缓冲区是程序运行的时候机器内存中的一个连续块,它保存了给定类型的数据,随着动态分配变量会出现问题。
8、大多时为了不占用太多的内存,一个有动态分配变量的程序在程序运行时才决定给它们分配多少内存。
9、如果程序在动态分配缓冲区放入超长的数据,它就会溢出了。
10、一个缓冲区溢出程序使用这个溢出的数据将汇编语言代码放到机器的内存里,通常是产生root权限的地方。
11、仅仅单个的缓冲区溢出并不是问题的根本所在。
12、但如果溢出送到能够以root权限运行命令的区域,一旦运行这些命令,那可就等于把机器拱手相让了。
13、造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。
14、例如下面程序: example1.c void func1(char *input) { char buffer[16]; strcpy(buffer, input); } 上面的strcpy()将直接吧input中的内容copy到buffer中。
15、这样只要input的长度大于16,就会造成buffer的溢出,使程序运行出错。
16、存在像strcpy这样的问题的标准函数还有strcat(),sprintf(),vsprintf(),gets(),scanf(),以及在循环内的getc(),fgetc(),getchar()等。
17、 当然,随便往缓冲区中填东西造成它溢出一般只会出现Segmentation fault 错误,而不能达到攻击的目的。
18、最常见的手段是通过制造缓冲区溢出使程序运行一个用户shell,再通过shell执行其他命令。
19、如果该程序属于root且有suid权限的话,攻击者就获得了一个有root权限的shell,便可以对系统进行任意操作了。
本文到此讲解完毕了,希望对大家有帮助。